我正在从Java过渡到c++,对长数据类型有一些问题。在Java中,要保存大于232的整数,只需编写长x;。然而,在c++中,long似乎既是一种数据类型,也是一个修饰符。
long似乎有几种用法:
long x;
long long x;
long int x;
long long int x;
此外,似乎还有这样的事情:
long double x;
等等。
所有这些不同的数据类型之间的区别是什么,它们都有相同的目的吗?
我正在从Java过渡到c++,对长数据类型有一些问题。在Java中,要保存大于232的整数,只需编写长x;。然而,在c++中,long似乎既是一种数据类型,也是一个修饰符。
long似乎有几种用法:
long x;
long long x;
long int x;
long long int x;
此外,似乎还有这样的事情:
long double x;
等等。
所有这些不同的数据类型之间的区别是什么,它们都有相同的目的吗?
当前回答
Long和Long int至少是32位。
Long Long和Long Long int至少是64位。你必须使用c99或更好的编译器。
长双头有点奇怪。详情请查阅维基百科。
其他回答
Long和Long int至少是32位。
Long Long和Long Long int至少是64位。你必须使用c99或更好的编译器。
长双头有点奇怪。详情请查阅维基百科。
没有区别,(long long x)等价于(long long int x),但第二个确认变量x是整数
Long等价于Long int,就像short等价于short int。long int是至少32位的有符号整型,而long long或long long int是至少64位的有符号整型。
这并不一定意味着long long比long宽。许多平台/ abi使用LP64模型——其中长(和指针)为64位宽。Win64使用LLP64,其中long仍然是32位,long long(和指针)是64位宽。
这里对64位数据模型进行了很好的总结。
长双精度线并不能保证它至少和双精度线一样宽。
从历史上看,在早期的C语言时代,当处理器有8或16位的字长时,intx与今天的短(16位)相同。在某种意义上,int是一种比char (short,longorlong)更抽象的数据类型,因为你不能确定位宽。
当定义int n时,你可以用“给我这台机器上n的位宽和速度的最佳妥协”来翻译它。也许在未来你应该期望编译器翻译成64位。所以当你想要你的变量是32位而不是更多的时候,最好使用显式的longas数据类型。
[编辑:#include <stdint.h>似乎是使用int##_t类型确保位宽的正确方法,尽管它还不是标准的一部分。]
在Java中,long总是64位,而在c++中,这取决于计算机体系结构和操作系统。例如,long在Linux上是64位,在Windows上是32位(这样做是为了保持向后兼容性,允许32位程序在64位Windows上编译而不做任何更改)。Long int是Long的同义词。
后来,long long被引入,意思是“长(64位)在Windows上是真的”。Long Long int是这个的同义词。
它被认为是很好的c++风格,避免短,整型,长等,而是使用:
std::int8_t # exactly 8 bits
std::int16_t # exactly 16 bits
std::int32_t # exactly 32 bits
std::int64_t # exactly 64 bits
std::size_t # can hold all possible object sizes, used for indexing
你可以通过包含<cstdint>头来使用这些int*_t类型。Size_t在<stdlib.h>中。