计算机中用补码来运算加减法,用补码计算-2147483647-1和2147483647+1都得到1000 0000 0000 0000 0000 0000 0000 0000,而加法溢出的结果在范围[-214748368,2147483647]中,故得到-214748368
不用弄那么多位了,你只要弄清楚八位的补码,即可。
八位二进制: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,算一下,就能找到这个交接点。
肯定和你给出的数字,完全相同。
-2^16 ~ 2^16 -1这是范围,1000 0000 0000 0000 0000 0000 0000 0000,最前一位是符号就是代表负数,是0代表正数,所以。。。。。。。。。
计算机中有符号数是用补码表示,最高位是符号位,后面是反码+1