鍍金池/ 問答/C  iOS  網(wǎng)絡安全/ [csapp]補碼加法

[csapp]補碼加法

在看深入理解計算機系統(tǒng)這本神書,在反過來回頭做補碼加法的題的時候有疑問,書上的例子:
圖片描述
圖片描述

圖一講得是w位的數(shù)補碼相加會產(chǎn)生4種情況,負溢出 正溢出(兩種) 正常情況。
我的疑問是在第二張圖中的例子第三個例子 -8 + 5
-8的補碼1000 5的補碼 0101 x+y=11101,最高位這個1是怎么來的?如果你說是根據(jù)1101最高位是1這么來的,那么怎么解釋最后一個例子中的5+5?

當然我可以把補碼轉換成原碼進行驗證,我只是想不明白這個地方,重新看了下這節(jié)內容也沒整明白。

另外強烈推薦這本書,解決了很多之前的疑問,好書。

回答
編輯回答
苦妄

吃了個飯回來再看明白了,不知道對不對,補碼擴展的話高位是0補零是1補1,所以上面的-8加5可以寫成11000 + 00101=11101

2017年2月22日 21:13
編輯回答
離夢

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

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

而這里之所以1101, 而不是11101, 是因為補碼是計算機對二進制的普遍表示方法, 而計算機中運算器的位長是固定的(定長運算),上述運算中產(chǎn)生的最高位進位1將丟掉,所以結果依然為4位二進制數(shù)1101

雖然沒有讀過這本書, 不過有機會希望拜讀下, 這是我以前寫的和補碼有關的一篇博文: http://czxyl.me/2017/02/28/%E...

希望對您有用.

2017年10月4日 09:48