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 int
types的说明符。 long long
一直是long long int
types的一个说明符。
尽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个字节