我已经用C ++编程了很长一段时间,而且我对大部分内容非常熟悉。但我从未理解的一件事是“长”数据类型。
我用谷歌搜索了它,但我仍然不知道它是什么。我发现页面说它的大小相同,并且与int的范围相同。那么使用它有什么意义呢?我在这里发现了另一个堆栈溢出问题: Difference between long and int data types
似乎两者之间的唯一区别是有时在不同系统上的大小不同。这是否意味着在64位机器上使用long的应用程序无法在32位机器上运行?如果是这样,那么根本不使用它们会不会更好?
我也注意到了一些名为“long int”甚至“long long”的东西!它是数据类型还是修饰符?
答案 0 :(得分:25)
它依赖于编译器。我的标准有点生疏,但我相信它的定义如下:
char <= short <= int <= long <= long long
其中:
char >= 8 bits
short >= 16 bits
int >= 16 bits
long >= 32 bits
long long >= 64 bits
这意味着拥有char = short = int = long = long long = 64bits
是完全有效的,事实上某些DSP的编译器就是这样设计的。
这强调了实际阅读编译器文档的重要性。
答案 1 :(得分:20)
我发现了一些名为“long int”甚至“long long”的东西!它是数据类型还是修饰符?
long int
与long
相同(正如short int
与short
相同)。
long long
是由多个编译器引入并由C ++ 0x采用的独特数据类型。
请注意,没有long long long
:
error: 'long long long' is too long for GCC
答案 2 :(得分:6)
从您链接的问题中的一个答案:
long必须至少与int相同,并且可能但不一定更长。
我想不出更好的解释方法。
答案 3 :(得分:5)
long
保证(至少)32位。 int
仅保证(至少)16位。在16位和8位系统上long
以效率为代价提供了范围。
答案 4 :(得分:4)
这就是C ++ 03标准所说的(3.9.1 / 2):
有四个有符号整数类型: “signed char”,“short int”,“int”和 “long int。”在此列表中,每种类型 提供至少与存储一样多的存储空间 列表中的前面那些。
所以:sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long)
这就是C ++ 0x(3.9.1 / 2)和C99(6.2.5 / 4)标准所说的:
五标准有符号整数 类型,指定为signed char, short int,int,long int和long long int。
long
是long int
long long
在C ++ 03中不存在,但在C ++ 0x中不存在。答案 5 :(得分:0)
如果你想要一个保证为32位或64位的整数,有这样的类型,例如的int64_t。如果你真的想确保int的大小,请使用这些类型而不是long,long long等。你需要为这些类型包含cstdint
(在C中使用stdint.h)。
答案 6 :(得分:0)
我用谷歌搜索了但我仍然不知道 它的用途。我找到了那些页面 说它的大小和大小相同 范围为int。那会是什么呢 指向使用它?
I've wondered the same thing.并得出结论:long
现在没用了。
在64位系统兴起之前,C整数类型的 事实上的 标准是:
char
=(u
)int8_t
(请注意,C早于Unicode。)short
= int16_t
int
= intptr_t
[直到64位],int_fast16_t
long
= int32_t
[直到64位],intmax_t
[直到1999年] long long
= int64_t
或intmax_t
但是,今天long
没有一致的语义。