两个负数的二进制补码是怎么相加的?
今天看了两个二进制补码相加运算:有一个地方一直补懂,补码的加法规则是:[X + Y]补 = [X]补 + [Y]补
补码的减法规则是:[X - Y]补 = [X]补 + [-Y]补
例如:用8位二进制补码计算:25+(-32) 这是一个正数和一个负数的相加,因为正数的最高位是0,负数的最高位是1,0加1后就是1所以下面的式子还算容易理解。
25 0 0 0 1 1 0 0 1
+ + + + + + + +
+( - 32 ) 1 1 1 0 0 0 0 0
‖‖‖‖‖‖‖‖
- 7 1 1 1 1 1 0 0 1
但是两个负数相加该怎么算呢?他们的最高位都是1,相加后等于0,如果最高位成0了,那就表示它不是一个负数了,如果还要进一位,那么规定的是8位进一位就成了9位了。例如下面的
(-25) 1 1 1 0 0 1 1 1
+ (-20) 1 1 1 0 1 1 1 1
-45 1 1 0 0 1 0 1 1 0
45的二进制码: 00101101 -45的二进制码: 1 1 0 1 0 0 1 1
是怎么算出来的呢?难道是先算出来了再算结果的补码吗?那样就不一定会超出要求的8位了。