什么是'长'数据类型用于什么?

时间:2010-12-01 21:22:57

标签: c++ types long-integer

我已经用C ++编程了很长一段时间,而且我对大部分内容非常熟悉。但我从未理解的一件事是“长”数据类型。

我用谷歌搜索了它,但我仍然不知道它是什么。我发现页面说它的大小相同,并且与int的范围相同。那么使用它有什么意义呢?

我在这里发现了另一个堆栈溢出问题: Difference between long and int data types

似乎两者之间的唯一区别是有时在不同系统上的大小不同。这是否意味着在64位机器上使用long的应用程序无法在32位机器上运行?如果是这样,那么根本不使用它们会不会更好?

我也注意到了一些名为“long int”甚至“long long”的东西!它是数据类型还是修饰符?

7 个答案:

答案 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 intlong相同(正如short intshort相同)。

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以效率为代价提供了范围。

欢呼&amp;第h。,

答案 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。

  • longlong 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 =(uint8_t(请注意,C早于Unicode。)
  • short = int16_t
  • int = intptr_t [直到64位],int_fast16_t
  • long = int32_t [直到64位],intmax_t [直到1999年]
  • long long = int64_tintmax_t

但是,今天long没有一致的语义。