在 C 标准中写道,即 int
应该具有:
但在实现中,即在 16 位机器上,值是:
为什么会有负值的差异?
最佳答案
两个范围都是有效的,不寻常的是第一个 [-32767...32767] 但根据 C 标准,它是完全正确的。
在许多实现中,短整数的最小值是 -(2^15 - 1)
然后是 -32768
。你会看到它被定义为:
#define SHRT_MIN 0x7FFF
#define SHRT_MIN (-32767 - 1)
#define SHRT_MIN (-32768)
标准断言它必须是
(-2^15 + 1)
(然后是 -32767
) 或更少 (因为实际值取决于特定的系统和库实现)。因为大多数实现使用二进制补码来表示负数(当 零对于整数 是无符号的),那么最小负值少一个单位。在实践中,这意味着您可以确保在编写程序时(无论编译器和平台如何)至少可以将 -32767
存储在 short
中(但对于某些编译器/平台,范围可能更宽,如您在编译器中看到的那样)。请注意,在这种情况下
-32768
有意义(对于 sizeof(int) > sizeof(short)
的平台),而不是 MIN_INT
,因为文字值实际上是 int
(不是 short
)。关于c - C 类型的取值范围,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23263978/