一、原碼、反碼、補(bǔ)碼的定義
1、原碼的定義
①小數(shù)原碼的定義
|
[X]原 =
|
 |
X |
0≤X <1 |
|
1- X |
-1 < X ≤ 0 |
例如: X=+0.1011 , [X]原= 01011
X=-0.1011 [X]原= 11011
②整數(shù)原碼的定義
|
[X]原 =
|
 |
X |
0≤X <2n |
|
2n-X |
- 2n < X ≤ 0 |
2、補(bǔ)碼的定義
①小數(shù)補(bǔ)碼的定義
|
[X]補(bǔ) =
|
 |
X |
0≤X <1 |
|
2+ X |
-1 ≤ X < 0 |
例如: X=+0.1011, [X]補(bǔ)= 01011
X=-0.1011, [X]補(bǔ)= 10101
②整數(shù)補(bǔ)碼的定義
|
[X]補(bǔ) =
|
 |
X |
0≤X <2n |
|
2n+1+X |
- 2n ≤ X < 0 |
3、反碼的定義
①小數(shù)反碼的定義
|
[X]反 =
|
 |
X |
0≤X <1 |
|
2-2n-1-X |
-1 < X ≤ 0 |
例如: X=+0.1011 [X]反= 01011
X=-0.1011 [X]反= 10100
②整數(shù)反碼的定義
|
[X]反 =
|
 |
X |
0≤X <2n |
|
2n+1-1-X |
- 2n < X ≤ 0 |
4.移碼:移碼只用于表示浮點(diǎn)數(shù)的階碼,所以只用于整數(shù)。
①移碼的定義:設(shè)由1位符號(hào)位和n位數(shù)值位組成的階碼,則 [X]移=2n + X -2n≤X ≤ 2n
例如: X=+1011 [X]移=11011 符號(hào)位“1”表示正號(hào)
X=-1011 [X]移=00101 符號(hào)位“0”表示負(fù)號(hào)
②移碼與補(bǔ)碼的關(guān)系: [X]移與[X]補(bǔ)的關(guān)系是符號(hào)位互為反碼,
例如: X=+1011 [X]移=11011 [X]補(bǔ)=01011
X=-1011 [X]移=00101 [X]補(bǔ)=10101
③移碼運(yùn)算應(yīng)注意的問題:
◎?qū)σ拼a運(yùn)算的結(jié)果需要加以修正,修正量為2n ,即對(duì)結(jié)果的符號(hào)位取反后才是移碼形式的正確結(jié)果。
◎移碼表示中,0有唯一的編碼——1000…00,當(dāng)出現(xiàn)000…00時(shí)(表示-2n),屬于浮點(diǎn)數(shù)下溢。
二、補(bǔ)碼加、減運(yùn)算規(guī)則
1、運(yùn)算規(guī)則
[X+Y]補(bǔ)= [X]補(bǔ)+ [Y]補(bǔ)
[X-Y]補(bǔ)= [X]補(bǔ)+ [-Y]補(bǔ)
若已知[Y]補(bǔ),求[-Y]補(bǔ)的方法是:將[Y]補(bǔ)的各位(包括符號(hào)位)逐位取反再在最低位加1即可。
例如:[Y]補(bǔ)= 101101 [-Y]補(bǔ)= 010011
2、溢出判斷,一般用雙符號(hào)位進(jìn)行判斷:
符號(hào)位00 表示正數(shù) 11 表示負(fù)數(shù)
結(jié)果的符號(hào)位為01時(shí),稱為上溢;為10時(shí),稱為下溢
例題:設(shè)x=0.1101,y=-0.0111,符號(hào)位為雙符號(hào)位
用補(bǔ)碼求x+y,x-y
[x]補(bǔ)+[y]補(bǔ)=00 1101+11 1001=00 0110
[x-y]補(bǔ)=[x]補(bǔ)+[-y]補(bǔ)=00 1101+00 0111=01 0100
結(jié)果錯(cuò)誤,正溢出
三、原碼一位乘的實(shí)現(xiàn):
設(shè)X=0.1101,Y=-0. 1011,求X*Y
解:符號(hào)位單獨(dú)處理, x符+ y符
數(shù)值部分用原碼進(jìn)行一位乘,如下圖所示:
|
高位部分積 |
低位部分積/乘數(shù) |
說明 |
|
0 0 0 0 0 0 |
1 0 1 1 |
|
|
起始情況 |
+) 0 0 1 1 0 1 |
|
|
乘數(shù)最低位為1,+X |
|
|
|
|
|
|
0 0 1 1 0 1 |
|
|
|
|
0 0 0 1 1 0 |
1 1 0 1 |
1(丟) |
右移部分積和乘數(shù) |
|
+) 0 0 1 1 0 1 |
|
|
乘數(shù)最低位為1,+X |
|
|
|
|
|
|
0 1 0 0 1 1 |
|
|
|
|
0 0 1 0 0 1 |
1 1 1 0 |
1(丟) |
右移部分積和乘數(shù) |
|
+) 0 0 0 0 0 0 |
|
|
乘數(shù)最低位為0,+0 |
|
|
|
|
|
|
0 0 1 0 0 1 |
|
|
|
|
0 0 0 1 0 0 |
1 1 1 1 |
0(丟) |
右移部分積和乘數(shù) |
|
+) 0 0 1 1 0 1 |
|
|
乘數(shù)最低位為1,+X |
|
|
|
|
|
|
0 1 0 0 0 1 |
|
|
|
|
0 0 1 0 0 0 |
1 1 1 1 |
1(丟) |
右移部分積和乘數(shù) |
|
|
|
|
|
四、原碼一位除的實(shí)現(xiàn):一般用不恢復(fù)余數(shù)法(加減交替法)
|
部分積 |
低位部分積 附加位 |
操作說明 |
|
0 0 0 0 0 0 |
1 0 1 1 |
|
|
起始情況 |
+) 0 0 0 0 0 0 |
|
|
乘數(shù)最低位為1,+X |
|
|
|
|
|
|
0 0 0 0 0 0 |
|
|
|
|
0 0 0 0 0 0 |
1 1 0 1 |
1(丟) |
右移部分積和乘數(shù) |
|
+) 1 1 0 0 1 1 |
|
|
乘數(shù)最低位為1,+X |
|
|
|
|
|
|
0 1 0 0 1 1 |
|
|
|
|
0 0 1 0 0 1 |
1 1 1 0 |
1(丟) |
右移部分積和乘數(shù) |
|
+) 0 0 0 0 0 0 |
|
|
乘數(shù)最低位為0,+0 |
|
|
|
|
|
|
0 0 1 0 0 1 |
|
|
|
|
0 0 0 1 0 0 |
1 1 1 1 |
0(丟) |
右移部分積和乘數(shù) |
|
+) 0 0 1 1 0 1 |
|
|
乘數(shù)最低位為1,+X |
|
|
|
|
|
|
0 1 0 0 0 1 |
|
|
|
|
0 0 1 0 0 0 |
1 1 1 1 |
1(丟) |
右移部分積和乘數(shù) |
§2.5 浮點(diǎn)運(yùn)算與浮點(diǎn)運(yùn)算器
一、浮點(diǎn)數(shù)的運(yùn)算規(guī)則
1、浮點(diǎn)加減法的運(yùn)算步驟
設(shè)兩個(gè)浮點(diǎn)數(shù) X=Mx※2Ex Y=My※2Ey
實(shí)現(xiàn)X±Y要用如下5步完成:
①對(duì)階操作:小階向大階看齊
②進(jìn)行尾數(shù)加減運(yùn)算
③規(guī)格化處理:尾數(shù)進(jìn)行運(yùn)算的結(jié)果必須變成規(guī)格化的浮點(diǎn)數(shù),對(duì)于雙符號(hào)位的補(bǔ)碼尾數(shù)來說,就必須是
001×××…×× 或110×××…××的形式
若不符合上述形式要進(jìn)行左規(guī)或右規(guī)處理。
④舍入操作:在執(zhí)行對(duì)階或右規(guī)操作時(shí)常用“0”舍“1”入法將右移出去的尾數(shù)數(shù)值進(jìn)行舍入,以確保精度。
⑤判結(jié)果的正確性:即檢查階碼是否溢出
若階碼下溢(移碼表示是00…0),要置結(jié)果為機(jī)器0;
若階碼上溢(超過了階碼表示的最大值)置溢出標(biāo)志。
例題:假定X=0 .0110011*211,Y=0.1101101*2-10(此處的數(shù)均為二進(jìn)制) ?? 計(jì)算X+Y;
解:[X]浮: 0 1 010 1100110
[Y]浮: 0 0 110 1101101
符號(hào)位 階碼 尾數(shù)
第一步:求階差: │ΔE│=|1010-0110|=0100
第二步:對(duì)階:Y的階碼小, Y的尾數(shù)右移4位
[Y]浮變?yōu)?0 1 010 0000110 1101暫時(shí)保存
第三步:尾數(shù)相加,采用雙符號(hào)位的補(bǔ)碼運(yùn)算
00 1100110
+00 0000110
00 1101100
第四步規(guī)格化:滿足規(guī)格化要求
第五步:舍入處理,采用0舍1入法處理
故最終運(yùn)算結(jié)果的浮點(diǎn)數(shù)格式為: 0 1 010 1101101,
即X+Y=+0. 1101101*210
2、浮點(diǎn)乘除法的運(yùn)算步驟
①階碼運(yùn)算:階碼求和(乘法)或階碼求差(除法)
即 [Ex+Ey]移= [Ex]移+ [Ey]補(bǔ)
[Ex-Ey]移= [Ex]移+ [-Ey]補(bǔ)
②浮點(diǎn)數(shù)的尾數(shù)處理:浮點(diǎn)數(shù)中尾數(shù)乘除法運(yùn)算結(jié)果要進(jìn)行舍入處理
例題:X=0 .0110011*211,Y=0.1101101*2-10
求X※Y
解:[X]浮: 0 1 010 1100110
[Y]浮: 0 0 110 1101101
第一步:階碼相加
[Ex+Ey]移=[Ex]移+[Ey]補(bǔ)=1 010+1 110=1 000
1 000為移碼表示的0
第二步:原碼尾數(shù)相乘的結(jié)果為:
0 10101101101110
第三步:規(guī)格化處理:已滿足規(guī)格化要求,不需左規(guī),尾數(shù)不變,階碼不變。
第四步:舍入處理:按舍入規(guī)則,加1進(jìn)行修正
所以 X※Y= 0.1010111※2+000