2025-11-08 05:25:03
因为32768是16位有符号整数的最大值加一所以它无法表示-32767和32768这两个相邻值必须通过溢出机制转换。当程序尝试存储32768时系统会自动将其视为-32768处理。而-32767刚好是16位有符号整数的最大负数所以这两个数在同一个存储单元里只能表示其中一个。
这是因为16位有符号整数采用补码存储规则。最高位1代表负数范围从-32768到-1最低位全1时表示32767。当数值超过32767时会触发溢出变成-32768。比如存储32768需要二进制1000这个值其实等于-32768。而-32767的二进制是1000所以存储时这两个数会互相占用同一个地址。数据转换过程就像钟表指针重叠一样当超过最大值就会回到最小值。
本题链接: