在C标准中,编写了这样的代码,即int应该有:
但在实现中,即在16位机器上,值为:
为什么负价值会有这种差异?
发布于 2014-04-24 09:01:56
这两个范围都是有效的,不寻常的是第一个-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)。
https://stackoverflow.com/questions/23263978
复制相似问题