最近在閱讀《深入理解計算機系統》講到補碼乘法,書上給了乙個例子是三位無符號和補碼的乘法表。其中兩個負數的例子:3位二進位制乘法結果一般需要6為二進位制表達
帶符號數
x=101=-3 和y=011=3相乘 結果為110111=-9
如果直接算出來十進位制是-9然後轉換為6為二進位制我也能理解,但是我很好奇他利用了什麼規則得出這樣的結果。
根據結果推過程我認為計算機做計算都要按照正數或者說無符號數來算,那麼先把x做補碼非得-x=011=3 和y相乘
___011
x__011
-------------
___011
+_011
-------------
001001
得到z=001001,然後根據x和y的符號位異或得到應該是負數,於是將結果再求補碼非 -z=110111 即-9
而唯一搜到的乙個
,這個位址給出的最後的例子,我加不出他給出的位級計算的結果(反倒用我上述的模式能得到結果但是這把我搞糊塗了)
這樣理解可能會更容易一些:
首先,我們從書上了解到關鍵的幾個知識點:
1. 對無符號和補碼乘法,乘法運算的位級表示都是一樣的。
2. 機器使用一種乘法指令來進行有符號和無符號整數的乘法,也就是都採用無符號乘法處理,再取低位。
3. 無符號和補碼的乘法低位是相同的,書上的圖也想表達的是這個意思。證明如下:
對於題主的問題,拿書上的例子來說,計算過程如下:
有符號二進位制數的減法
本人的簡單學習過程。題目 十進位制6 12 6,利用有符號位二進位制寫出來過程。解題思路 第一步 把減12變為加負12,利用有符號二進位制表示出來 6 12 6 12 00000110 00001100 00000110 10001100 第二步 將第一步結果分別轉化成補碼 見最下補充 000001...
有符號數的二進位制數右移
把乙個二進位制數右移n位,規則為 除符號位外,全部右移n位,如果數字是乙個無符號數值,則用0填補最左邊的n位,如果數字是乙個有符號數值,則用1填補最左邊的n位,也就是說如果數字原先是乙個正數,則右移之後在最左邊補n個0 如果數字原先是個負數,則右移之後在最左邊填補n個1。例子 0000 0010 1...
有符號二進位制數128位booth乘法器
目錄簡介 基4booth編碼器 4 2壓縮器 超前進製加法器 結果 總結 因為在這學期低功耗課程中老師布置的期末作業是做乙個128乘法器,但想省事兒只選擇了 調研。覺得挺可惜的,就趁著暑期時間完成這個任務。本乘法器採用基4booth編碼,輸入為兩個128位有符號數,輸出為256位有符號數。基4的bo...