C类型值的范围

xde*_*000 3 c

用C标准写的,即一个int应具有:

  • 最低-32767最高32767

但是在实现中,即在16位计算机上,其值为:

  • 最低-32768最高32767

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

Adr*_*tti 5

这两个范围均有效,第一个[-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或更小(因为实际值取决于特定的系统和库的实现)。因为大多数实现都使用二进制补码来表示负数(当整数为零为零),则最小负值要少一个单位。实际上,这意味着您可以确保在编写程序时(无论编译器和平台如何)至少可以将其存储-32767short(但是对于某些编译器/平台,范围可能会比在编译器中看到的要宽)。

请注意,在这种情况下-32768(对于的平台sizeof(int) > sizeof(short))是有道理的,而不是和MIN_INT,因为文字值实际上是int(而不是short)。