2.2 课后习题详解

1写出下列各整数的原码、反码、补码表示(用8位二进制数)。其中MSB是最高位(符号位),LSB是最低位。

(1)-35

(2)127

(3)-127

(4)-1

答:根据原码、反码、补码之间的转换关系可得:

(1)[-35]=1010 0011

[-35]=1101 1100

[-35]=1101 1101

(2)[127]=0111 1111

[127]=0111 1111

[127]=0111 1111

(3)[-127]=1111 1111

[-127]=1000 0000

[-127]=1000 0001

(4)[-1]=1000 0001

[-1]=1111 1110

[-1]=1111 1111

2设[x]=a7.a6a5…a0,其中ai取0或1,若要x>-0.5,求a0,a1,a2,…,a6的取值。

答:[x]=a7.a6a5…a0

若a7=0,则x>0,满足x>-0.5,此时a0到a6可任意取值;

若a7=1,则x≤0,要满足x>-0.5,需a6=1,即a7=1,a6=1,a0到a5不全为0。

3有一个字长为32位的浮点数,符号位1位;阶码8位,用移码表示;尾数23位,用补码表示;基数为2。请写出:

(1)最大数的二进制表示;

(2)最小数的二进制表示;

(3)规格化数所能表示的数的范围。

答:该浮点数的格式如图2-10所示。

图2-10 该浮点数的格式

由于S是数符,已表示了尾数的符号,所以为了提高表示精度,M(23位)不必存储符号位,只需要存小数点后面的有效数值即可。

(1)最大数的二进制表示为:0 11111111 11111111111111111111111(23个1);

(2)最小数的二进制表示为:1 11111111 00000000000000000000000(23个0);

(3)非IEEE754标准的补码表示的规格化数是指其最高位有效位与符号位相反,故有:

最大正数为:0 11111111 11111111111111111111111(23个1)=+(1-223)×2127

最小正数为:0 00000000 10000000000000000000000(22个0)=+21×2128

最大负数为:1 00000000 01111111111111111111111(22个1)=-(21+223)×2128

最小负数为:1 11111111 00000000000000000000000(23个0)=-1×2127

所以其表示数的范围是:-1×2127~-(21+223)×2128以及+21×2128~+(1-223)×2127

4将下列十进制数表示成IEEE754标准的32位浮点规格化数。

(1)27/64

(2)-27/64

答:27/64=0.011011=(1.1011)2×22

(1)27/64的32位浮点规格化数的表示为0 01111101 10110000000000000000000

(2)-27/64的32位浮点规格化数的表示为1 01111101 10110000000000000000000

5已知x和y,用变形补码计算x+y,同时指出结果是否溢出。

(1)x=11011,y=00011

(2)x=11011,y=-10101

(3)x=-10110,y=-00001

答:采用双符号位判断是否溢出。

(1)[x]=00 11011,[y]=00 00011,故有

x+y=11110,结果未溢出。

(2)[x]=00 11011,[y]=11 01011,故有

x+y=00110,结果未溢出。

(3)[x]=11 01010,[y]=11 11111,故有

x+y=-10111,结果未溢出。

6已知x和y,用变形补码计算x-y,同时指出运算结果是否溢出。

(1)x=11011,y=-11111

(2)x=10111,y=11011

(3)x=11011,y=-10011

答:[x-y]=[x]-[y]=[x]+[-y],采用双符号位判断是否溢出。

(1)[x]=00 11011,[-y]=00 11111,故有

符号位为01,结果正溢出。

(2)[x]=00 10111,[-y]=11 00101,故有

x-y=-00100,结果未溢出。

(3)[x]=00 11011,[-y]=00 10011

符号位为01,结果正溢出。

7用原码阵列乘法器、补码阵列乘法器分别计算x×y。

(1)x=11011,y=-11111

(2)x=-11111,y=-11011

答:(1)原码阵列乘法

x=11011,y=-11111;

[x]=0 11011,[y]=1 11111;

符号位:x0⊕y0=0⊕1=1,故有

则[x×y]=1 1101000101,x×y=-11 0100 0101。

直接补码阵列乘法

[x]=0 11011,[y]=1 00001,故有

[x×y]=1 0010111011,x×y=-11 0100 0101

(2)原码阵列乘法

[x]=1 11111,[y]=1 11011;

符号位单独运算:x0⊕y0=1⊕1=0,故有

[x×y]=0 1101000101,x×y=11 0100 0101。

直接补码阵列乘法

[x]=1 00001,[y]=1 00101,故有

[x×y]=0 11010 00101,x×y=11 0100 0101

8用原码阵列除法器计算x÷y(注:先乘1个比例因子变成小数)。

(1)x=11000,y=-11111

(2)x=-01011,y=-11001

答:(1)用原码阵列除法器计算,符号位单独计算,Sf=0⊕1=1;

设a=|x|×25,b=|y|×25,则a,b均为正的纯小数,且x÷y的数值为a÷b,余数等于a÷b的余数乘以25,则[a]=[|x|×25]=0.11000,[b]=[|y|×25]=0.11111,[-b]=1.00001,故有

即a÷b的商为0.11000;余数为1.11001×25;因为1.11001为负数,加b处理为正数得1.11001+b=1.11001+0.11111=0.11000,所以a÷b的余数为0.11000×25

所以,x÷y的商为-0.11000,余数为0.11000。

(2)商的符号位Sf=1⊕0=1

设a=|x|×25,b=|y|×25,则a,b均为正的纯小数,且x÷y的数值等于a÷b;余数等于a÷b的余数乘以25,[a]=[|x|×25]=0.01011,[b]=[|y|×25]=0.11001,[-b]=1.00111,故有

即a÷b的商为0.01110,余数为1.01001×25,因为1.01001位负数,加b处理为正数,即1.01001+b=1.01001+0.11001=0.00010,所以a÷b的余数为0.00010×25

所以,x÷y的商为-0.01110,余数为0.00010。

9设阶码3位,尾数6位,按浮点运算方法,完成下列取值的[x+y],[x-y]运算:

(1)x=2011×0.100101,y=2010×(-0.011110)

(2)x=2101×(-0.010110),y=2100×(-0.010110)

答:(1)设阶码和尾数均以补码表示,阶码采用双符号位,尾数采用单符号位,则它们的浮点表示分别为:

[x]=11,101;0.100101,[y]=11,110;1.100010,则[x+y]的计算过程如下:

求阶差并对阶

ΔE=Ex-Ey=[Ex]-[Ey]=[Ex]+[-Ey]=11101+00010=11111

即ΔE为-1,x阶码小,根据小阶向大阶看齐的原则,应使Mx右移1位,Ex加1,则

[x]=11,110;0.010010(1)

尾数求和

规格化:尾数运算结果的符号位与最高有效位的数据相同,应该执行左规格化处理,尾数每左移一次,相应阶码减1,所以结果尾数为1.010010,阶码为11100;

舍入处理:本题不需要进行舍入操作;

判断溢出:阶码两符号位为11,结果未溢出。

故最后结果为:

[x+y]=11,100;1.010010,真值为2100×(-0.101110)。

求[x-y]的计算过程与[x+y]的计算过程的差别在于尾数求差这一步,如下所示:

上述结果已经规格化,采用0舍1入进行舍入处理,则[x-y]=11,110;0.110001,真值为2010×0.110001。

(2)设阶码和尾数均以补码表示,阶码采用双符号位,尾数采用单符号位,则它们的浮点表示分别为:

[x]=11,011;1.101010,[y]=11,100;0.010110

求阶差并对阶

ΔE=Ex-Ey=[Ex]-[Ey]=[Ex]+[-Ey]=11,011+00,100=11,111

即ΔE为-1,x阶码小,根据小阶向大阶看齐的原则,应使Mx右移1位,Ex加1,则

[x]=11,100;1.110101(0)

尾数求和

规格化

可见尾数运算结果的符号位与最高有效位的数据相同,应执行左规格化处理,每左移尾数一次,相应阶码减1,所以结果尾数为0.101100,阶码为11010;

舍入处理:本题不需要;

判断溢出:阶码两符号位为11,没有溢出。

故最后结果为[x]+[y]=11,010;0.10110,真值为2110×(0.10110)。

而求[x-y]的计算过程与[x+y]的计算过程的差别在于尾数求差这一步,如下所示:

[x-y]=11,100;1.011111,真值为2100×(-0.100001)。

10设数的阶码3位,尾数6位,用浮点运算方法,计算下列各式:

(1)

(2)

答:(1)假设阶码采用补码表示,尾数采用原码表示,阶码和尾数均采用单符号位,阶码为3位,尾数为6位,则[x]=0,011;0.110100,[y]=0,100;1.100100。

尾数符号位:符号位Sf=0⊕1=1,去掉尾数符号位后,得到

Ex=0011,Mx=0.110100

Ey=0100,My=0.100100

阶码相加:Ez=Ex+Ey=0111;

尾数相乘:Mz=Mx×My

得到Mz=0.01110101;

规格化:执行左规格化,尾数每左移一位阶码减1,得到Ez=0110,Mz=0.1110101;

舍入处理:采用四舍五入,得到Mz=0.111011,最后加上符号,得

(2)假设阶码与尾码采用补码表示,且均用单符号位,阶码为3位,尾数为6位,则

[x]=1,110;0.011010,Ex=1110,Mx=0.011010

[y]=0,011;0.111100,Ey=0011,My=0.111100

尾数符号位:符号位Sf=0⊕0=0;

阶码相减:Ez=Ex-Ey=1 110-0011=1011;

尾数相除:Mz=Mx÷My

Mx÷My的商为0.0110111,余数为0.011100×27,则x÷y余数为0.111000×210。最后可得x÷y的商为0.0110111×21011,规格化处理后为0.110111×26,余数为0.111000×210

11某加法器进位链小组信号为C4C3C2C1,低位来的进位信号为C0,请分别按下述两种方式写出C4C3C2C1的逻辑表达式:

(1)串行进位方式

(2)并行进位方式

答:4位加法器如图2-11所示。

图2-11 4位加法器

其进位逻辑表达式为

(1)串行进位方式的逻辑表达式

C1=G1+P1C0,其中G1=A1B1,P1=A1⊕B1

C2=G2+P2C1,其中G2=A2B2,P2=A2⊕B2

C3=G3+P3C2,其中G3=A3B3,P3=A3⊕B3

C4=G4+P4C3,其中G4=A4B4,P4=A4⊕B4

(2)并行进位方式的逻辑表达式

C1=G1+P1C0

C2=G2+P2G1+P2P1C0

C3=G3+P3G2+P3P2G1+P3P2P1C0

C4=G4+P4G3+P4P3G2+P4P3P2G1+P4P3P2P1C0

12用IEEE 32位浮点格式表示如下的数:

(1)-5

(2)-1.5

(3)384

(4)1/16

(5)-1/32

答:IEEE浮点格式的阶码减去127为真值指数。

(1)-5=-(101)2=-(1.01)2×22,故浮点格式为:

1 10000001 01000000000000000000000

(2)-1.5=-(1.1)2=-(1.1)2×20,故浮点格式为:

1 01111111 10000000000000000000000

(3)384=(180)16=(1 1000 0000)2=(1.1)2×28,故浮点格式为:

0 10000111 10000000000000000000000

(4)1/16=(1.0)2×24,故浮点格式为:

0 01111011 00000000000000000000000

(5)-1/32=-(1.0)2×25,故浮点格式为:

1 01111010 00000000000000000000000

13下列各数使用了IEEE 32位浮点格式,相等的十进制是什么?

(1)1 10000011 110 00000000000000000000

(2)0 01111110 101 00000000000000000000

答:(1)(-1.11×242=(-11100)2=(-28)10

(2)(1.101×212=(0.1101)2=(0.8125)10

1432位格式最多能表示232个不同的数,用IEEE 32位浮点格式最多能表示多少不同的数?为什么?

答:IEEE754标准中,32位二进制数仍然有232种不同组合,但是由于在IEEE754中,阶码为全1且尾数为非0的情况不表示一个数。尾数23位,尾数非0有223-1种组合,再配合符号位,共有2×(223-1)种组合不表示一个数,所以该格式最多能表示不同的数的个数为232-2×(223-1)。

15设计一个带有原码阵列乘法器(使用芯片)和原码阵列除法器(使用芯片)的定点运算器。

答:设输入的数据为X和Y,则会把数据驱动到原码乘法器和原码除法器芯片上,并且它是通过操作控制信号选通相应的芯片进行指定运算的,因此设计如图2-12所示。

图2-12 带原码阵列乘法及除法器的定点运算器

16设计一个ALU(4位),完成加、减、取反、取补、逻辑乘、逻辑加、传送、加1等8种运算功能。

答:8种功能运算,需要采取的控制端个数为3个,通过对控制端信号的逻辑组成产生相应运算功能的逻辑编码,其对应关系如表2-2所示。

表2-2 8种功能运算的编码组成

如图2-13所示。

图2-13 完成8种功能的ALU

17改进74181ALU芯片设计,操作控制信号只有8种。

答:74181ALU可以简化为4种逻辑运算和4种算数运算,通过S2、S1、S0的逻辑组合,可以表示8种状态,这时通过控制相应状态逻辑的开或关,即可构成一种操作控制。

18设计一个余3码编码的十进制加法器单元电路。

答:余3码编码的十进制加法规则是:两个1位十进制数的余3码相加,如结果无进位,则从和数中减去3(即加上1101);如结果有进位,则和数中加上3(加上0011),即得和数的余3码。

设参加运算的两个一位的十进制数分别为Ai和Bi,它们的余3码分别为Ai0~Ai3和Bi0~Bi3,其二进制加法的和的编码为Si0~Si3,进位为Ci1,修正之后,和对应的余3码为Fi0~Fi3,进位为CYi1,则根据余3码的运算规则有:

当Ci1=0时,Fi3Fi2Fi1Fi0=Si3Si2Si1Si0+1101;当Ci1=1时,Fi3Fi2Fi1Fi0=Si3Si2Si1Si0+0011,由此可画出逻辑电路图如图2-14所示。

图2-14 余3码编码的十进制加法器