long 保证有 32 位吗?
尽管基于 C 标准的常见假设,问题是 long 是否保证有至少 32 位。标准将基本整数类型分类为:
sizeof(char) ≤ sizeof(short int) ≤ sizeof(int) ≤ sizeof(long int)
但是,许多人认为基于此层次结构,long 必须具有 32 位。然而,该标准明确指出,一个字节中的位数是实现定义的。
Alf P. Steinbach 的声明
尽管这看似矛盾,但 Alf P. Steinbach 的声明
Steinbach 断言 long 保证为 32 位。他的这一主张基于 long 可以容纳的值范围(LONG_MIN 到 LONG_MAX)的隐式限制。LONG_MIN ≤ -2^31 + 1 LONG_MAX ≥ 2^31 - 1
C 标准引用了 C 标准 (18.3.2),其中定义了:
与 32 位表示的连接
如果负数使用符号位,则总存储空间仍需要 32 位。
结论
虽然 C 标准没有明确要求 long 具有 32 位,但最小范围要求(LONG_MIN 到 LONG_MAX)隐含地要求它。这是因为表示这些值需要 32 位存储或具有等效值容量的特定于实现的机制。因此,可以得出结论,C保证long至少有32位。以上是C 中的'long”保证至少有 32 位吗?的详细内容。更多信息请关注PHP中文网其他相关文章!