定點原碼 補碼一位乘

2021-10-12 16:29:17 字數 1281 閱讀 1565

移位操作對於任何計算機來說都是不可缺少的操作,各種計算機指令系統中都含有移位指令。

這裡首先給大家介紹一下移位操作中的算術移位(原碼右移、補碼右移)

算術原碼右移:符號位不變,各位右移,最高有效位補0,末位移出。

列如:1.1001 右移 1.0100 ; 0.1101 右移 0.0110

算術補碼右移:符號位不變,同時移至最高有效為,各位右移,最低位移出。

列如:11.01 右移 11.11 ; 00.1011 右移 00.0101

定點原碼一位乘 x*y演算法:

位數 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.

yn​yn+

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...