C类型的值范围

时间:2014-04-24 08:43:37

标签: c

在C标准中写道,即int应具有:

  • min -32767 max 32767

但在实现中,即在16位机器上,值为:

  • min -32768 max 32767

为什么负值会有这种差异?

1 个答案:

答案 0 :(得分:5)

两个范围都有效,异常是第一个[-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)。