移位操作對於任何計算機來說都是不可缺少的操作,各種計算機指令系統中都含有移位指令。定點原碼一位乘 x*y演算法:這裡首先給大家介紹一下移位操作中的算術移位(原碼右移、補碼右移)
算術原碼右移:符號位不變,各位右移,最高有效位補0,末位移出。
列如:1.1001 右移 1.0100 ; 0.1101 右移 0.0110
算術補碼右移:符號位不變,同時移至最高有效為,各位右移,最低位移出。
列如:11.01 右移 11.11 ; 00.1011 右移 00.0101
位數 n=max(x,y)
一律用變形碼
加和右移移位完成,符號位不參與運算
開始部分積00.000…0(n個0)
yn = 0 : +0
yn = 1 :+x
右移一位,判斷新的yn ,一次重複做n次,得2n位積
用異或配積的符號位:ux=xf ⊕yf
變形碼指的是:符號位採用兩位。
列如 1.001 變形碼為 11.001
移位操作是將部分積的最後一位移動到 y中
原碼乘法中的符號位本參加運算,需要單獨用以個異或門產生乘積的符號位。故人們自然地思考能否讓符號數位化後產假乘法運算,補碼乘法就可以實現符號位直接參加運算定點補碼一位乘演算法(booth演算法):
準備[x]補,[-x]補,[y]補;增加乘數y的「補充位」yn+1=0
位數 n = max(x,y)
開始部分積:00.0…0(n個0)
判斷 ynyn+1。
y ny
n+1=
=\left\ 00 & & :+0\\ 11 & & :+0\\ 01 & &:+[x]_補\\ 10 & & +[-x]_補 \end \right.
ynyn+
1=⎩
⎪⎪⎨⎪
⎪⎧0
0110
110
:+0
:+0:
+[x]
補+[
−x]補
右移一位
對4,5步重複n+1次,最後一次只加不移位,2n位的結果是補碼如果需要原碼,結果還得補一次。
定點小數補碼一位乘(校正法)
程式 定點小數補碼一位乘 校正法 define crt secure no warnings include include include using namespace std const int n 4 數值位位數 a,b聯合右移 算術移位 void rightmove bitset a,bi...
補碼一位乘和補碼二位乘
補碼一位乘 回顧原碼的一位乘 原碼一位乘是數值位之間的計算,計算之前需要對被乘數取絕對值,符號位單獨處理 而補碼乘法的符號位是計算過程中產生的,因此不需要對被乘數取絕對值。被乘數和部分積均取2位符號位,因此乘數和被乘數均要在最高位擴位。補碼擴位原則 正數補0,負數補1.乘數取一位附加位,作為乘數的最...
原碼一位乘法和補碼一位乘法
原碼乘法遵循的規則如下 比如 a 0.1101,b 0.1011,求a b的積?詳細計算過程如下圖 符號位與符號進行計算.a的符號位為 1,b的符號位為 1.兩個符號進行異或運算最後的符號仍然是 1.數值位乘以數值位.a 0.1101,b 0.1011.我們採用雙符號位來進行計算.a 00.1101...