(轉)計算機組成與結構:原碼、反碼、補碼、移碼、二進制乘除法運算


原碼:

最高位為符號位,0表示正數,1表示負數。

正數的原碼:等於本身

負數的原碼:等於(1-本身)

例如:X = +0.1011 , 原碼 = 01011 ;

           X = - 0.1011 , 原碼 = 11011 ;(小數點可以保留或者省略)

補碼:

最高位為符號位,0表示正數,1表示負數。

正數(X)的補碼:等於本身。

負數(X)的補碼:等於(2+X)=(2-|X|),(各位取反,末尾加一)

例如:X = +0.1011 , 補碼 = 0.1011 ;

           X = -0.1011 , 補碼 = 1.0101 ;

正0的補碼 = 負0的補碼 = 0.0000 。

補碼加法運算:[X+Y]的補碼 = [X]的補碼 + [Y]的補碼 。

反碼:

最高位為符號位,0表示正數,1表示負數。

正數(X)的反碼 = 本身

負數(X)的反碼 = 2 - (2的(-n)次冪)+ X , (各位取反)

例如:X = +0.1011 (n = 4), 反碼 = 0.1011 ;

           X = -0.1011 (n = 4) , 反碼 = 1.0100 ;

正0的反碼 = 0.0000 , 負0的反碼 = 1.1111 ;

移碼:

最高位為符號位,1表示正數,0表示負數。

正數(X)的移碼 = 2的n次冪 + X的補碼 = 符號位+本身 ;

負數(X)的移碼 = X的補碼 - 2的n次冪 = 符號位+(各位取反,末尾加一)

例如:X = +1011 , 補碼 = 01011 , 移碼 = 11011 ;

           X = -1011 , 補碼 = 10101 , 移碼 = 00101 ;

二進制乘法運算:

一、定點數一位乘法:

注意:如果小數點后面有4位,則要進行右移4次,如果有6位,則要進行右移6次,依次類推。

在求部分積時,由於前一次部分積的最低位不再參與運算,因此可將其右移一位,相加數可直送而不必偏移,於是用N位加法器就可實現兩個N位數相乘。

部分積右移時,乘數寄存器同時右移一位,這樣可以用乘數寄存器的最低位來控制相加數(取被乘數或零0),同時乘數寄存器的最高位可接收部分積右移出來的一位,因此,完成乘法運算后,A寄存器中保存乘積的高位部分,乘數寄存器中保存乘積的低位部分。

(原碼右移,最高位補0)(補碼右移,最高位不變)

1.定點數原碼一位乘法:

[X·Y]的原碼 = [X]的原碼 · [Y]的原碼 = (符號位異或).(數值位兩個數絕對值之積) 。

例題:

答案:X·Y = 0.10001111

解析:第一步:因為乘數的最后一位是1,所以部分積應該+X,得00.1101,然后進行右移一位,將最后移出的那一位變成乘數的首位,乘數也進行右移一位,最后一位移出丟失。

           第二部:重復上面的步驟。

          因為小數點后面有四位,所以共需要進行4此移位,4次加法,最后符號位進行異或,判斷正負,得出結果。

注:    (乘數的最后一位為1,部分積+X)

           (乘數的最后一位為0,部分積+0)

2.定點補碼一位乘法:

定點原碼一位乘法用的是【原碼】進行運算,例如+X是加的X的原碼。

而定點補碼一位乘法用的是【補碼】進行運算,例如+X是加的X的補碼。

注:在[X·Y]中,如果Y為負數,需要補充進行(-[X]的補碼)操作;Y為正數,則不需要。

例如:

答案:[X·Y]的補碼 = 0.10001111

解析:因為Y為負數,所以最后要進行加上  (-[X]的補碼)  的操作。

3.布斯(Booth)公式:

乘數的  最后一位 - 前一位 = 0 ,則部分積 + 0 ;

乘數的  最后一位 - 前一位 = 1; 則部分積 + [X]的補碼 ;

乘數的  最后一位 - 前一位 = -1;則部分積 + [-X]的補碼 ;

最后一步不移位。

例如:

二、定點數二位乘法

注意:如果小數點后面有4位,則要進行右移2次,如果有6位,則要進行右移3次,和定點一位乘法不同。

                                                          原碼兩位乘法規則:

Y(i-1) Y(i) C 操作 操作
0 0 0 部分積+0,右移2位 0->C
0 0 1 +X,右移2位 0->C
0 1 0 +X,右移2位 0->C
0 1 1 +2X,右移2位 0->C
1 0 0 +2X,右移2位 0->C
1 0 1 -X,右移2位 1->C
1 1 0 -X,右移2位 1->C
1 1 1 +0,右移2位 1->C

解析:第一次乘數的最后兩位是11,而C的初始值是0,所以就是110,在上方表格中找到110,對應的操作是(-X,右移兩位,C賦值為1),用補碼來算,也就是+[-x]的補碼,然后將C賦值為1,重復上面的操作。


免責聲明!

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



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