讲解1 二进制运算习题讲解

讲解1 二进制运算习题讲解


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(122)221

12m

m(2)2(1)2212

m1

③ 乘数最低位增加一位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条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信