在32位的系统,int类型最大值正数为2147483647,加1后溢出的结果 -2147483648,这是为什么? 5
不用弄那么多位了,你只要弄清楚八位的补码,即可。
八位二进制:0000 0000~1111 1111。
对应十进制:0 ~ 255,共 256 个。
它们以补码,分别代表:-128 ~ +127。
看下面的表:
八位的补码 代表十进制数
255 = 1111 1111 -1
254 = 1111 1110 -2
。。。
129 = 1000 0001 -127
128 = 1000 0000 -128----负数“极大值”
127 = 0111 1111 +127----正数极大值
126 = 0111 1110 +126
。。。
2 = 0000 0010 +2
1 = 0000 0001 +1
0 = 0000 0000 0
-------------------
看到了吗?
最大值+127,加上 1,就得到了-128。
这与你说的,正数到负数的变化,雷同。
在补码中,正数、负数的交接点,就在这!
-------------------
补码的定义式:
负数X的补码=模(2^n)-| X |
当 n=8,[-128]补 = 256-128
= 128 = 1000 0000B
你用 n=32,算一下,就能找到这个交接点。
肯定和你给出的数字,完全相同。