”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > C++ 中的“long”保证至少有 32 位吗?

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

发布于2024-11-07
浏览:960

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 断言 long 保证为 32 位。他的这一主张基于对 long 可以保存的值范围(LONG_MIN 到 LONG_MAX)的隐式限制。

C 标准引用了 C 标准 (18.3.2),其中定义了:

LONG_MIN ≤ -2^31   1
LONG_MAX ≥ 2^31 - 1

与 32 位表示的连接

虽然这建立了一个 long 范围,但它并没有明确保证 32 位。然而,有两种可能性:

  1. 二进制补码表示:
    如果负数以二进制补码表示,则存储 LONG_MIN 或 LONG_MAX 需要 32 位。
  2. 显式符号位:
    如果负数使用符号位,则总存储空间仍需要 32 位。

结论

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

最新教程 更多>

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3