c - 为什么在 short/int/long 中多了一个整数类型?

标签 c integer standards

直到最近,由于历史原因和台式机处理器都至少有 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 应该匹配 shortlong 还是明显地楔入 short/long 之间是高度依赖于平台的。

C 旨在适应范围的处理器。鉴于 C 已经 40 多岁了,这证明了一个成功的策略。

关于c - 为什么在 short/int/long 中多了一个整数类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37256904/

相关文章:

c - ISO C 标准中 __attribute__ 的替代品是什么?

javascript - 数字(整数或小数)到数组,数组到数字(整数或小数)而不使用字符串

java - 原始值如何存储在对象中以及对象被转换时会发生什么

coding-style - 你如何记录你的编码标准?

c - 在 C 中默认签名

c++ - C/C++ 中的 JSON <-> XML

c - 指针解除引用错误的原因

c - 错误: No matching asm pattern exists

php - 通过 PHP 在 MySQL 中查询整数

php - 输入标签值属性的转义要求