C标准规定int
应该具有以下值:
- 最小值-32767,最大值32767
但在实现中,即在16位机器上,这些值为:
- 最小值-32768,最大值32767
为什么负值的差异如此之大?
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
)。