原碼一位乘法與補碼一位乘法


原碼1位乘法

在定點計算機中,兩個原碼表示的數相乘的運算規則是:乘積的符號位由兩數的符號按異或運算得到。而乘積的數值部分則是兩個正數相乘之積。設n位被乘數和乘數用定點小數表示(定點整數也相同適用)

被乘數 [x]原 = xf .xxx2 … xn        

乘數   [y]原 = yf .yyy2 … yn

乘積   ]原 = ( xf⊕yf ) . (0. xxx2 …xn)(0 . yy2 …yn)

式中,xf為被乘數符號。yf為乘數符號。

乘積符號的運算法則是:同號相乘為正,異號相乘為負。因為被乘數和乘數和符號組合僅僅有四種情況(xyf = 00,01,10,11),因此積的符號可按“異或”(按位加)運算得到。

數值部分的運算方法與普通的十進制小數乘法相類似。只是對於用二進制表達的數來說,其乘法規則更為簡單一些:從乘法y的最低位開始。若這一位為“1”。則將被乘數x寫下;若這一位為“0”,則寫下全0。然后再對乘數y的高一位進行的乘法運算,其規則同上,只是這一位乘數的權與最低位乘數的權不一樣。因此被乘數x要左移一位。依次類推。直到乘數各位乘完為止。最后將它們統統加起來。便得到最后乘積。  

 

 

 

補碼1位乘法

原碼乘法的主要問題是符號位不能參加運算,單獨用一個異或門產生乘積的符號位。

故自然提出是否能讓符號數字化后也參加乘法運算,補碼乘法就能夠實現符號位直接參加運算

 

設被乘數 [x]補 = x0.x1x2…xn 和乘數 [y]補 = y0.y1y2…yn 均為隨意符號,則有補碼乘法算式

  [ · ]補 = [x]補 ·  ( - y0 + ∑ yi * 2^-i )

為了推出串行邏輯實現人分步算法,將上式展開加以變換:

[x·y]補   = [x]補·[ - y0 + y1^2-1 + y2^2-2 + … + yn^2-n]

          = [x]補·[ - y0 + (y1 - y1^2-1) + (y2^2-1 - y2^2-2) + … + (yn^2-(n-1) - yn^2-n)]

          = [x]補·[(y1 - y0) + (y2 - y1) ^2-1 + … + (yn - yn-1) 2^-(n-1) + (0 - yn)^2-n]

          = [x]補·            (yn+1  =  0)   

 補碼一位乘法運算規則

(1) 假設 yn = yn+1,部分積 [ zi ] 加0。再右移一位;

(2) 假設 yn yn+1 = 01。部分積加[ x ]補。再右移一位;

(3) 假設 yn yn+1 = 10,部分積加[ - x]補,再右移一位;

這樣反復進行 n+1 步,但最后一步不移位。包含一位符號位,所得乘積為 2n+1 位,當中 n 為尾數位數。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM