補(bǔ)碼加法,補(bǔ)碼加法計算原理
補(bǔ)碼加法,補(bǔ)碼加法計算原理
負(fù)數(shù)用補(bǔ)碼表示后,可以和正數(shù)一樣來處理。這樣,運(yùn)算器里只需要一個加法器就可以了,不必為了負(fù)數(shù)的加法運(yùn)算,再配一個減法器。
補(bǔ)碼加法的公式是
[x]補(bǔ)+[y]補(bǔ)=[x+y]補(bǔ)? (mod 2) (2.17)
現(xiàn)分四種情況來證明。假設(shè)采用定點(diǎn)小數(shù)表示,因此證明的先決條件是
︱x︱﹤1, ︱y︱﹤1, ︱x+y︱﹤1。
(1)x﹥0,y﹥0,則x+y﹥0。
相加兩數(shù)都是正數(shù),故其和也一定是正數(shù)。正數(shù)的補(bǔ)碼和原碼是一樣的,可得:
[x]補(bǔ)+[y]補(bǔ)=x+y=[x+y]補(bǔ) ???? (mod 2)
(2)x﹥0,y﹤0,則x+y>0或x+y<0。
相加的兩數(shù)一個為正,一個為負(fù),因此相加結(jié)果有正、負(fù)兩種可能。根據(jù)補(bǔ)碼定義,
∵ [x]補(bǔ)=x, [y]補(bǔ)=2+y
∴ [x]補(bǔ)+[y]補(bǔ)=x+2+y=2+(x+y)
當(dāng)x+y>0時,2 + (x+y) > 2,進(jìn)位2必丟失,又因(x+y)>0,
故 [x]補(bǔ)+[y]補(bǔ)=x+y=[x+y]補(bǔ) ???? ?? (mod 2)
當(dāng)x+y<0時,2 + (x+y) < 2,又因(x+y)<0,
故 [x]補(bǔ)+[y]補(bǔ)=2+(x+y)=[x+y]補(bǔ) (mod 2)
(3)x<0,y>0,則x+y>0或 x+y<0。
這種情況和第2種情況一樣,把x和y的位置對調(diào)即得證。
(4)x<0,y<0,則x+y<0。
相加兩數(shù)都是負(fù)數(shù),則其和也一定是負(fù)數(shù)。
∵ [x]補(bǔ)=2+x, [y]補(bǔ)=2+y
∴ [x]補(bǔ)+[y]補(bǔ)=2+x+2+y=2+(2+x+y)
上式右邊分為“2”和(2+x+y)兩部分.既然(x+y)是負(fù)數(shù),而其絕對值又小于1,那么(2+x+y)就一定是小于2而大于1的數(shù),進(jìn)位“2”必丟失.又因(x+y)<0,所以
[x]補(bǔ)+[y]補(bǔ)=2+(x+y)=[x+y]補(bǔ) (mod 2)
至此我們證明了,在模2意義下,任意兩數(shù)的補(bǔ)碼之和等于該兩數(shù)之和的補(bǔ)碼.這是補(bǔ)碼加法的理論基礎(chǔ),其結(jié)論也適用于定點(diǎn)整數(shù)
[例8] x=0.1001, y=0.0101,求x+y。
[解:]
[x]補(bǔ)=0.1001,[y]補(bǔ)=0.0101
???
所以 x+y=+0.1110
[例9] x=+0.1011, y=-0.0101,求x+y。
[解:]
[x]補(bǔ)=0.1011,[y]補(bǔ)=1.1011
???
所以 x+y=0.0110
由以上兩例看到,補(bǔ)碼加法的特點(diǎn),一是符號位要作為數(shù)的一部分一起參加運(yùn)算,二是要在模2的意義下相加,即超過2的進(jìn)位要丟掉。
非常好我支持^.^
(64) 17.5%
不好我反對
(301) 82.5%
相關(guān)閱讀:
( 發(fā)表人:admin )