C ++中的“long”,“long long”,“long int”和“long long int”有什么区别?
我正在从Java转换到C ++,并对long数据types有一些疑问。 在Java中,要保存大于2 32的整数,您只需编写long x; 。 但是,在C ++中, long似乎既是数据types又是修饰符。
似乎有几种使用long :
long x; long long x; long int x; long long int x;
另外,似乎有这样的事情:
long double x;
等等。
所有这些不同的数据types有什么区别,它们都有相同的目的吗?
long和long int是一样的。 所以是long long 。 在这两种情况下, int都是可选的。
至于两套之间的区别,C ++标准规定了每个标准的最小范围,而long long 至less与long一样宽。
标准的控制部分(C ++ 11,但这已经存在很长时间了),其中之一是3.9.1 Fundamental types ,第2节(后面的部分给出了无符号整型的类似规则):
有五种标准的有符号整数types:signed char,short int,int,long int和long long int。 在这个列表中,每个types至less提供了与列表中的前一个相同的存储空间。
7.1.6.2 Simple type specifiers还有一个表9,它显示了说明符到实际types的“映射”(显示int是可选的),其中的一部分如下所示:
Specifier(s) Type ------------- ------------- long long int long long int long long long long int long int long int long long int
请注意说明符和types之间的区别。 说明符是如何告诉编译器该types是什么,但是可以使用不同的说明符以相同的types结束。
因此, long本身既不是一个types也不是你的问题所指的修饰词,它只是一个long inttypes的说明符。 long long一直是long long inttypes的一个说明符。
尽pipeC ++标准本身并没有指定整型的最小范围,但是在1.2 Normative references中引用了C99。 因此, C99 5.2.4.2.1 Sizes of integer types <limits.h>规定的最小范围C99 5.2.4.2.1 Sizes of integer types <limits.h>是适用的。
在long double ,这实际上是一个浮点值,而不是一个整数。 与整型types相似,要求至less具有与double精度types相同的精度,并提供该types值的超集( 至less意味着这些值,而不一定是更多的值)。
long和long int至less是32位。
long long long long int至less是64位。 你必须使用c99或更好的编译器。
长双打有点奇怪。 查看维基百科上的详细信息。
long等于long int ,就像short等于short int 。 long int是一个至less有 32位的有符号整数types,而long long long long int是一个有符号整数types,至less是 64位。
这并不一定意味着long long的long 。 许多平台/ ABI使用LP64模型 – long (和指针)是64位宽。 Win64使用LLP64 ,其中long仍然是32位, long long (和指针)是64位宽。
这里有一个很好的64位数据模型的总结。
long double不能保证,至less会有double宽度。
这看起来很混乱,因为你本身就是一个数据types。
long只是单独使用long int的简写。
long是一个修饰符,你可以使用它与double也可以long double 。
long == long int 。
他们两个都需要4个字节。
历史上,早在C时代,当处理器具有8位或16位字长时, int与今天的short (16位)是相同的。 从某种意义上说,int是一个比char更short抽象数据types, short , long或long long ,因为你不能确定位宽。
当定义int n; 你可以把这个翻译成“让我在这台机器上的位宽和速度达到最佳折中”。 也许将来你应该期望编译器把int转换为64位。 所以当你希望你的variables有32位而不是更多的时候,最好使用一个明确的long的数据types。
[编辑: #include <stdint.h>似乎是确保使用int ## _ ttypes的位宽的正确方法,尽pipe它尚未成为标准的一部分。]
long int或long的长度为4个字节,long long或long long的长度为8个字节