为什么在short/int/long中多了一个整数类型?
Why an extra integer type among short/int/long?
直到最近我还认为 'long' 与 'int' 是一回事,因为历史原因和桌面处理器都至少有 32 位(并且只有 "dupe" 有问题因为只在 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
很特别。它是 所有较窄类型提升到的大小,因此通常在给定处理器上工作 "best"。所以 int
应该匹配 short
,long
还是明显地楔入 short/long
之间是高度依赖于平台的。
C 旨在适应宽 范围的处理器。鉴于 C 已经 40 岁以上,这证明了一个成功的策略。
直到最近我还认为 'long' 与 'int' 是一回事,因为历史原因和桌面处理器都至少有 32 位(并且只有 "dupe" 有问题因为只在 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
很特别。它是 所有较窄类型提升到的大小,因此通常在给定处理器上工作 "best"。所以 int
应该匹配 short
,long
还是明显地楔入 short/long
之间是高度依赖于平台的。
C 旨在适应宽 范围的处理器。鉴于 C 已经 40 岁以上,这证明了一个成功的策略。