直到最近,由于历史原因和台式机处理器都至少有 32 位,我认为“long”与“int”是同一回事(而且只有在 32 位机器上开发时才会遇到这种“欺骗”的问题) .
阅读 this ,我发现,事实上,C 标准将 int 类型定义为至少 int16,而“long”应该至少是 int32。
其实在列表中
- 短有符号整数类型。能够至少包含 [−32767, +32767] 范围
- 基本有符号整数类型。能够至少包含 [−32767, +32767] 范围;
- 长有符号整数类型。能够至少包含 [−2147483647, +2147483647] 范围
- 长有符号整数类型。能够至少包含 [−9223372036854775807, +9223372036854775807] 范围;
无论编译器和平台选择何种实现,总是存在非空交集,因此存在重复。
为什么标准委员会在可能像 char/short/int/long(或 int_k、int_2k、int_4k、int_8k)这样简单的类型中引入了一个额外的类型?
这是出于历史原因,例如,gcc x.x 将 int 实现为 32 位,而另一个编译器将其实现为 16 位,还是我遗漏了真正的技术原因?
最佳答案
中心点是 int/unsigned
不仅仅是 char, short,int, long, long long
阶梯中整数大小的又一步。 int
比较特殊。它是所有较窄类型提升到的大小,因此通常在给定处理器上“最佳”工作。因此,int
应该匹配 short
、long
还是明显地楔入 short/long
之间是高度依赖于平台的。
C 旨在适应范围的处理器。鉴于 C 已经 40 多岁了,这证明了一个成功的策略。
关于c - 为什么在 short/int/long 中多了一个整数类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37256904/