首页 >后端开发 >C++ >C 中的'long”保证至少有 32 位吗?

C 中的'long”保证至少有 32 位吗?

Barbara Streisand
Barbara Streisand原创
2024-10-26 17:39:301085浏览

Is `long` Guaranteed to Have at Least 32 Bits in C  ?

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 位表示的连接

  1. 虽然这建立了一个 long 范围,但它并没有明确保证 32 位。但是,有两种可能性:
  2. 二进制补码表示:
  3. 如果负数以二进制补码表示,则存储 LONG_MIN 或 LONG_MAX 需要 32 位。
  4. 显式符号位:

如果负数使用符号位,则总存储空间仍需要 32 位。

结论

虽然 C 标准没有明确要求 long 具有 32 位,但最小范围要求(LONG_MIN 到 LONG_MAX)隐含地要求它。这是因为表示这些值需要 32 位存储或具有等效值容量的特定于实现的机制。因此,可以得出结论,C保证long至少有32位。

以上是C 中的'long”保证至少有 32 位吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn