在32位的系统,int类型最大值正数为2147483647,加1后溢出的结果 -2147483648,这是为什么?

1000 0000 0000 0000 0000 0000 0000 0000 怎么就能代表-2147483648呢?
2025-03-07 06:59:40
推荐回答(4个)
回答1:

计算机中用补码来运算加减法,用补码计算-2147483647-1和2147483647+1都得到1000 0000 0000 0000 0000 0000 0000 0000,而加法溢出的结果在范围[-214748368,2147483647]中,故得到-214748368

回答2:

不用弄那么多位了,你只要弄清楚八位的补码,即可。

八位二进制: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,算一下,就能找到这个交接点。

肯定和你给出的数字,完全相同。

回答3:

-2^16 ~ 2^16 -1这是范围,1000 0000 0000 0000 0000 0000 0000 0000,最前一位是符号就是代表负数,是0代表正数,所以。。。。。。。。。

回答4:

计算机中有符号数是用补码表示,最高位是符号位,后面是反码+1