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

Ale*_*lex 13 c++ types long-integer

我已经用C++编程了很长一段时间,而且我对大多数东西非常熟悉.我从未理解的一件事是"长"数据类型.

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

我在这里发现了另一个堆栈溢出问题: long和int数据类型之间的区别

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

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

sle*_*man 25

它取决于编译器.我的标准有点生疏,但我相信它的定义如下:

char <= short <= int <= long <= long long
Run Code Online (Sandbox Code Playgroud)

哪里:

char      >= 8 bits
short     >= 16 bits
int       >= 16 bits
long      >= 32 bits
long long >= 64 bits
Run Code Online (Sandbox Code Playgroud)

这意味着它实际上是有效的char = short = int = long = long long = 64bits,事实上某些DSP的编译器就是这样设计的.


这强调了实际阅读编译器文档的重要性.

  • 几乎,`sizeof(char)== 1`但``CHAR_BIT`可以是任意数字.唯一的要求是将为平台保留整个基本字符集. (5认同)

fre*_*low 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
Run Code Online (Sandbox Code Playgroud)


Nat*_*ate 6

从您链接的问题中的一个答案:

long必须至少与int相同,并且可能但不一定更长.

我想不出更好的解释方法.


Che*_*Alf 5

long保证(至少)32位.int仅保证(至少)16位.在16位和8位系统long上以效率为代价提供了范围.

干杯和hth.,

  • @ Tabber33:C++03§3.9,脚注37说,"意图是C++的内存模型与ISO/IEC 9899编程语言C的内存模型兼容." 这意味着所有关于POD类型的陈述都有C89的基础.对于该定义,它还在§3.9.1的脚注39中引用了"<climits>".我没有C89的副本,但是C99§5.2.4.2.1说`long`必须能够保存至少32位整数.因此,`long`保证*至少*32位.QED. (4认同)