这两个范围均有效,第一个[-32767 ... 32767] 是不常见的,但根据C标准,这是完全正确的。
在许多实现中用于短整型最小值为-(2^15 - 1)然后-32768。您会看到它的定义为:
#define SHRT_MIN 0x7FFF
#define SHRT_MIN (-32767 - 1)
#define SHRT_MIN (-32768)
Run Code Online (Sandbox Code Playgroud)
Standard断言它必须是(-2^15 + 1)(then -32767)或更小(因为实际值取决于特定的系统和库的实现)。因为大多数实现都使用二进制补码来表示负数(当整数为零时为零),则最小负值要少一个单位。实际上,这意味着您可以确保在编写程序时(无论编译器和平台如何)至少可以将其存储-32767在short(但是对于某些编译器/平台,范围可能会比在编译器中看到的要宽)。
请注意,在这种情况下-32768(对于的平台sizeof(int) > sizeof(short))是有道理的,而不是和MIN_INT,因为文字值实际上是int(而不是short)。