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 位。然而,有两种可能性:
结论
虽然 C 标准没有明确要求 long 具有 32 位,但最小范围要求(LONG_MIN 到 LONG_MAX)隐含地要求它。这是因为表示这些值需要 32 位存储或具有等效值容量的特定于实现的机制。因此,可以得出结论,C保证long至少有32位。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3