2024年1月7日发(作者:)
[例题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最小正数
最大负数
最小负数
溢出
定点数:超出字长所表示的范围即为溢出
浮点数:规格化后,阶码超出机器的最大阶码,即为上溢;阶码小于机器最小阶码,即为下溢。(不看尾数,只看阶码)
二进制乘法
原码一位乘法规则:
① 被乘数和乘数取绝对值参加运算,符号位单独处理
② 被乘数取双符号,部分积长度同被乘数,初值为0
③ 从乘数的最低位yn开始判断,若yn=1,则部分积加上被乘数,然后右移一位;若yn=0,部分积加上0,然后右移一位。
④ 重复③,共n次(n次“加-右移)n为小数点后数值部分位数
补码一位乘法规则(Booth算法):
① 符号位参加运算,运算的数均以补码表示
② 被乘数取双符号,部分积初值为0
浮点数代码
阶码
01„„1(2-1)
10„„0(-2m)
10„„0(-2m)
01„„1(2m-1)
m尾数
0.11„„1(1-2)
0.10„„0(2-1)
1.10„„0(-2-1)
1.00„„0(-1)
-n真值
n2m(122)221
12m
m(2)2(1)2212
m1
③ 乘数最低位增加一位Yn+1,初值为0
④ 逐次比较相邻两位,并按下列规则运算
Yn(高位) Yn+1(低位) 操作
0 0
1
0
1
部分积右移
部分积+[-X]补,右移
部分积+[X]补,右移
0
1
1 部分积右移
移位按补码右移规则,即复制最高位(符号位)
⑤ 按照上述算法作n+1步操作,但最后一步不移位(∵补码符号位也是数值一部分,故共做n+1次加法,n次右移)
[例题2.2]
已知X=0.1101,Y=-0.1011,用原码一位乘计算X×Y
解:乘积符号位=1
部分积
00.0000
00.1101
00.1101
00.0110 1
00.1101
01.0011 1
|乘数| 说明
0.1011
0.101
yn=0,则部分积加上0,右移
yn=1,则部分积加上被乘数,右移
yn=1,则部分积加上被乘数,右移
+
右移
+
右移
右移
+
右移
yn=1,则部分积加上被乘数,右移
00.1001 11 0.10
00.0100 111 0.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
部分积 乘数 ynyn+1 说明
00.0000
11.0011
11.0011
11.1001 1
00.1101
1.0101
ynyn+1=01, 部分积+[X]补,右移
进位1舍去
ynyn+1=10, 部分积+[-X]补,右移
1.01010
增加一位yn+1=0,ynyn+1=10, 部分积+[-X]补,右移
右移
1 00.0110 1
右移 00.0011 01 1.010
右移
11.0011
11.0110 01
11.1011 001
1.01 ynyn+1=01, 部分积+[X]补,右移
00.1101
进位1舍去
ynyn+1=10, 部分积+[-X]补,最后一步不右移
1 00.1000 001
右移 00.0100 0001 1.0
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
-Y
被除数(余数)
0.01010
1.10100
1.11110
0.11010 余数为负,商上0
最后一步得出的余数为负,加上除数进行修正
0.1101 余数为正,商上1,下一步“左移-减”
0.11 余数为正,商上1,下一步“左移-减”
0.1 余数为正,商上1,下一步“左移-减”
0
商
说明
第一步先减除数
余数为负,商上0,下一步“左移-加”
左移 1.11100
+Y 0.01100
0.01000
左移 0.10000
-Y 1.10100
0.00100
左移 0.10000
-Y
1.10100
1.11100 0.110 余数为负,商上0,下一步“左移-加”
左移 1.11100
+Y 0.01100
0.00100
左移 0.10000
-Y 1.10100
1.11100
+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×11/16,Y=2×13/16,求X+Y=?写出运算过程。
解:Mx=11/16=1011×2=0.1011
-4-4-3 My=13/16=1101×2=0.1101
-4Ex=-4 [Ex]补=11,11 1100 [Mx]补=00.101100
Ey=-3 [Ey]补=11,11 1101
(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
[-Ey]补=00,000011 [My]补=00.110100
发布者:admin,转转请注明出处:http://www.yc00.com/news/1704575111a1358496.html
评论列表(0条)