原碼乘法遵循的規則如下
比如 a = -0.1101, b = 0.1011,求a*b的積?(詳細計算過程如下圖)
符號位與符號進行計算.a的符號位為-1,b的符號位為+1.兩個符號進行異或運算最後的符號仍然是-1.
數值位乘以數值位.|a|=0.1101,|b| = 0.1011.我們採用雙符號位來進行計算.|a| = 00.1101, |b| = 00.1011.下面是|a|*|b|的運算過程:
acc是累加暫存器,初始值為000000,mq是乘商計算器,存著除數b,即為001011.
第一次計算,此時mq的值為001011,最低位為1,要乘以|a|.所以累加暫存器acc(acc的值為000000)加上 1 *00.1101(|a|的值) = 00.1101,再向右移動一位也就變成了00.0110.
第二次運算,mq的最低位還是為1,acc此時的值是00.0110加上 1 *00.1101 = 01.0011,再向右移動一位就變成了00.1001.
第三次運算mq此時的值是11.0010,最低位是0.所以acc的值+0*00.1101 = 00.1001,再往右移動一位變成了00.0100.
第四次計算mq的最低位為1,acc的值+1*00.1101 = 01.0001,再往右移動一位變成了00.1000.
因為除數b只有4位,移位運算進行到第四次就可以停止,mq捨棄最後兩位符號位,將acc和mq的值組合起來就是00.10001111.加上最開始異或計算的符號位最終的結果為 -0.10001111
比如 a = -0.1101, b = 0.1011,求a*b的積?
先計算出幾個值為後續的計算做準備.
a的補碼 a補 = 11.0011,-a的補碼 (-a補) = 00.1101,b補 = 00.1011
補碼一位乘法遵循的規則如下
詳細計算過程如下圖.acc初始時裝著000000,mq初始時存著單符號位b的值並在最後面新增個輔助位0,即010110.
第一次運算看mq最後一位減去倒數第二位的值來決定加什麼.比如此時mq的值為00110,0-1 = -1.那麼就要加上-a的補碼.如果相減為+1,那就要加上a的補碼.還有一種情況相減為0.那就加0.因此acc的值000000 + (-a補) = 00.1101,再往右移動一位高位補0就變成了00.0110.
第二次計算mq最後一位減去倒數第二位的值為0,因此acc的值加0右移變成了00.0011
第三次計算mq最後一位減去倒數第二位的值為+1,因此acc的值加a補右移變成了11.1011
第四次計算mq最後一位減去倒數第二位的值為-1,acc的值加上(-a補) = 100.1000,溢位了一位捨棄掉,就成了00.1000
第五次計算mq最後一位減去倒數第二位的值為+1,acc的值加上a補 = 11.0111.到此結束不用移位.
由於乘數b只有4位,故只進行5次運算,並且最後一次運算只相加不移位.最終的結果為11.01110001,對其求補碼就變成了11.10001111,最終的結果就是-0.10001111.
原碼一位乘法
1.手算乘法 鋪墊 例子 13 11 143 被乘數不動,從乘數最低位開始,每一位乘上被乘數,將所得的結果 部分積 記下,再從比最低位高一位的數字開始如上迴圈,直至乘數的最高位也計算完畢。最終將每一豎列的數值相加即可得出結果。按照我們小學所學的乘法計算公式應該如上圖所示沒有問題,我們教科書裡說的原碼...
一位原碼的乘法規則 原碼一位乘法的實現演算法
原碼一位乘法的實現演算法 一 用原碼實現乘法運算是十分方便的。原碼表示的兩個數相乘,其乘積的符號為相乘兩數符號的異或值,數值則為兩數絕對值之積。假定 x 原 xsx1 x2 xn y 原 ysy1y2 yn 則 x y 原 x 原 y 原 xs ys x1x2 xn y1 y2 yn 結果是把符號位...
定點原碼 補碼一位乘
移位操作對於任何計算機來說都是不可缺少的操作,各種計算機指令系統中都含有移位指令。這裡首先給大家介紹一下移位操作中的算術移位 原碼右移 補碼右移 算術原碼右移 符號位不變,各位右移,最高有效位補0,末位移出。列如 1.1001 右移 1.0100 0.1101 右移 0.0110 算術補碼右移 符號...