[csapp]补码加法

在看深入理解计算机系统这本神书,在反过来回头做补码加法的题的时候有疑问,书上的例子:
图片描述
图片描述

图一讲得是w位的数补码相加会产生4种情况,负溢出 正溢出(两种) 正常情况。
我的疑问是在第二张图中的例子第三个例子 -8 + 5
-8的补码1000 5的补码 0101 x+y=11101,最高位这个1是怎么来的?如果你说是根据1101最高位是1这么来的,那么怎么解释最后一个例子中的5+5?

当然我可以把补码转换成原码进行验证,我只是想不明白这个地方,重新看了下这节内容也没整明白。

另外强烈推荐这本书,解决了很多之前的疑问,好书。

阅读 5.3k
2 个回答

吃了个饭回来再看明白了,不知道对不对,补码扩展的话高位是0补零是1补1,所以上面的-8加5可以写成11000 + 00101=11101

图2x+y只是恰巧截断到了5位. 给你截到8-bit, 可能更直接:

    (-8)  1111 1000
 +  (+5)  0000 0101 
   ------------------
    (-3)  1111 1101

而这里之所以1101, 而不是11101, 是因为补码是计算机对二进制的普遍表示方法, 而计算机中运算器的位长是固定的(定长运算),上述运算中产生的最高位进位1将丢掉,所以结果依然为4位二进制数1101

虽然没有读过这本书, 不过有机会希望拜读下, 这是我以前写的和补码有关的一篇博文: http://czxyl.me/2017/02/28/%E...

希望对您有用.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进