[例题2.1]
码值10000001B,若表示一个无符号数,则该数为27+20=129;若是一个带符号数的原码表示,则该数为-0000001B=-1;若是一个带符号数的补码表示,则该数为-1111111B=-127
规格化的浮点数
✓浮点数的阶码决定了浮点数的表示范围,浮点数的尾数决定了浮点数的表示精度✓定义:有效尾数占满尾数的所有位
即对于非0的尾数,规格化尾数应满足1/2≤|M|<1
原码规格化后:正数0.1×××的形式;负数1.1×××的形式
补码规格化后:正数0.1×××的形式;负数1.0×××的形式(-1/2为1.100 0
比较特殊)
✓浮点数的表示范围
设阶码m+1位补码表示,尾数n+1位补码,规格化
溢出
✓定点数:超出字长所表示的范围即为溢出
✓浮点数:规格化后,阶码超出机器的最大阶码,即为上溢;阶码小于机器最小阶码,即为下溢。
(不看尾数,只看阶码)
二进制乘法
✓原码一位乘法规则:
①被乘数和乘数取绝对值参加运算,符号位单独处理
②被乘数取双符号,部分积长度同被乘数,初值为0
③从乘数的最低位y
n 开始判断,若y
n
=1,则部分积加上被乘数,然后右移一位;
若y
n
=0,部分积加上0,然后右移一位。
④重复③,共n次(n次“加-右移)n为小数点后数值部分位数✓补码一位乘法规则(Booth算法):
①符号位参加运算,运算的数均以补码表示
②被乘数取双符号,部分积初值为0
③乘数最低位增加一位Yn+1,初值为0
④逐次比较相邻两位,并按下列规则运算
Y
n (高位) Y
n+1
(低位) 操作
0 0 部分积右移
1 0 部分积+[-X]
补
,右移
0 1 部分积+[X]
补
,右移
1 1 部分积右移
移位按补码右移规则,即复制最高位(符号位)
⑤按照上述算法作n+1步操作,但最后一步不移位(∵补码符号位也是数值一部
分,故共做n+1次加法,n次右移)
[例题2.2]
已知X=0.1101,Y=-0.1011,用原码一位乘计算X×Y
解:乘积符号位=1
部分积|乘数| 说明
00.0000 0.1011 y
n
=1,则部分积加上被乘数,右移+ 00.1101
00.1101
右移00.0110 1 0.101 y
n
=1,则部分积加上被乘数,右移+ 00.1101
01.0011 1
右移00.1001 11 0.10 y
n
=0,则部分积加上0,右移
右移00.0100 111 0.1 y
n
=1,则部分积加上被乘数,右移+ 00.1101
01.0001 111
右移00.1000 1111
∴ X×Y=-0.1000 1111
[例题2.3]
已知X=0.1101,Y=-0.1011,用补码一位乘计算X×Y
解:[X]
补=00.1101,[-X]
补
=11.0011,[Y]
补
=1.0101
部分积乘数 y
n
y
n+1
说明
00.0000 1.01010 增加一位y
n+1
=0,y
n
y
n+1
=10, 部分积+[-X]
补
,右移11.0011
11.0011
右移11.1001 1 1.0101 y
n y
n+1
=01, 部分积+[X]
补
,右移
00.1101
1 00.0110 1 进位1舍去
右移00.0011 01 1.010 y
n y
n+1
=10, 部分积+[-X]
补
,右移
11.0011 11.0110 01
右移11.1011 001 1.01 y
n y
n+1
=01, 部分积+[X]
补
,右移
00.1101
1 00.1000 001 进位1舍去
右移 00.0100 0001 1.0 y
n y
n+1
=10, 部分积+[-X]
补
,最后一步不右移
11.0011
11.0111 0001
∴ [X×Y]
补
=1.0111 0001 X×Y=-0.1000 1111
二进制除法
✓原码一位除法(不恢复余数法,加减交替法)规则:
①符号位不参加运算,并要求|X|<|Y|
②先用被除数减去除数
③若余数为正,商上1,余数左移1位减除数;
若余数为负,商上0,余数左移1位加除数
④重复③n次(n为数值部分位数),当最后一步(第n+1步)余数为负时,需加上
|Y|得到正余数
[例题2.4]
已知X=-0.01010,Y=-0.01100,用原码加减交替法计算X÷Y
解:同号数相除,得出的商和余数的符号位均为正
|X|=0.01010 ,|Y|=0.01100, [-|Y|]
补
=1.10100
被除数(余数) 商说明
0.01010
-Y 1.10100 第一步先减除数
1.11110 0 余数为负,商上0,下一步“左移-加”
左移 1.11100
+Y 0.01100
0.01000 0.1 余数为正,商上1,下一步“左移-减”
左移 0.10000
-Y 1.10100
0.00100 0.11 余数为正,商上1,下一步“左移-减”
左移 0.10000
-Y 1.10100
1.11100 0.110 余数为负,商上0,下一步“左移-加”
左移 1.11100
+Y 0.01100
0.00100 0.1101 余数为正,商上1,下一步“左移-减”
左移 0.10000
-Y 1.10100
1.11100 0.11010 余数为负,商上0
+Y 0.01100 最后一步得出的余数为负,加上除数进行修正
0.01000
∴X÷Y=-0.11010 余数0.01000×2-5
✓补码一位除法规则:
① 参加运算的数用补码表示,符号位参加运算, 商、余数均为补码,并自带符号 ② 若被除数与除数同号,则减去除数;若被除数与除数异号,则加上除数
③ 若余数与除数同号,商上1,下次左移后做减;若异号,商上0,下次左移后做加 ④ 重复③,连同符号位一共做n +1次(n 为数值部分位数);商末尾恒置1(末位有误差)
浮点数加减运算
① 对阶:向大阶看齐
a) 先求Ex ,Ey 之差:△E =Ex -Ey b) 阶码小的数尾数右移| △E |位 ② 右移后的尾数相加减 ③ 结果规格化 ④ 舍入
⑤ 判溢:根据阶码判断 [例题2.5]
设浮点数字长16位,其中阶码8位,以2为底;尾数8位,规格化。
都用双符号位补码表示。
X =2-4
×11/16,Y=2-3
×13/16,求X +Y =?写出运算过程。
解:Mx=11/16=1011×2-4
=0.1011
My=13/16=1101×2-4
=0.1101
Ex =-4 [Ex]补=11,11 1100 [Mx]补=00.101100 Ey =-3 [Ey]补=11,11 1101 [-Ey]补=00,000011 [My]补=00.110100
(1)求阶差:
[△E] 补=[Ex -Ey] 补=[Ex]补+[-Ey]补=11,111100+00,000011=11,111111 ∴△E=-1 Mx 右移1位
X ’: [Mx ’]补=00.010110 [Ex ’]补=11,11 1101
(2) [Mx ’]补+[My]补=00.010110+00.110100=01.001010(看似有溢出) (3)规格化:将相加后的尾数右移1位,变为00.100101 (0舍去) 相应地阶码加1,变为11,11 1110 (4)规格化后的阶码无溢出
∴X +Y =00.100101(尾) 11,111110(阶) 即X +Y =0.100101×2
-2。