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有什么区别,它们都有相同的目的吗?

longlong int是一样的。 所以是long long 。 在这两种情况下, int都是可选的。

至于两套之间的区别,C ++标准规定了每个标准的最小范围,而long long 至lesslong一样宽。

标准的控制部分(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 intlong int是一个至less有 32位的有符号整数types,而long long long long int是一个有符号整数types,至less是 64位。

这并不一定意味着long longlong 。 许多平台/ 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是一个比charshort抽象数据types, shortlonglong long ,因为你不能确定位宽。

当定义int n; 你可以把这个翻译成“让我在这台机器上的位宽和速度达到最佳折中”。 也许将来你应该期望编译器把int转换为64位。 所以当你希望你的variables有32位而不是更多的时候,最好使用一个明确的long的数据types。

[编辑: #include <stdint.h>似乎是确保使用int ## _ ttypes的位宽的正确方法,尽pipe它尚未成为标准的一部分。]

long int或long的长度为4个字节,long long或long long的长度为8个字节