加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

【课后习题答案】数据的表示与运算

(2011-12-15 14:59:50)
标签:

杂谈

分类: 第6章运算

2. 已知X=0.a1a2a3a4a5a6(ai为0或1),讨论下列几种情况时ai各取何值。

(1)http://s1/middle/&690

(2)http://s1/middle/&690

(3)http://s1/middle/&690

解: (1)若要http://s1/middle/&690,只要a1=1,a2~a6不全为0即可。

(2)若要http://s1/middle/&690,只要a1~a3不全为0即可。

(3)若要http://s1/middle/&690,只要a1=0,a2可任取0或1;

当a2=0时,若a3=0,则必须a4=1,且a5、a6不全为0;

若a3=1,则a4~a6可任取0或1;

当a2=1时, a3~a6均取0。

 

3. 设x为整数,[x]=1,x1x2x3x4x5,若要求 x < -16,试问 x1~x5 应取何值?

解:若要x < -16,需 x1=0,x2~x5 任意。(注:负数绝对值大的补码码值反而小。)

 

4. 设机器数字长为8位(含1位符号位在内),写出对应下列各真值的原码、补码和反码。         -13/64,29/128,100,-87

解:真值与不同机器码对应关系如下:

真值

-13/64

29/128

100

-87

二进制

-0.001101

0.0011101

1100100

-1010111

原码

1.001 1010

0.001 1101

0110 0100

1101 0111

补码

1.1100110

0.001 1101

0110 0100

10101001

反码

1.1100101

0.001 1101

0110 0100

10101000

 

5. 已知[x],求[x]和x。

[x1]=1.1100; [x2]=1.1001; [x3]=0.1110;  [x4]=1.0000;

[x5]=1,0101; [x6]=1,1100; [x7]=0,0111; [x8]=1,0000;

解:[x]与[x]、x的对应关系如下:

[x]

1.1100

1.1001

0.1110

1.0000

1,0101

1,1100

0,0111

1,0000

[x]

1.0100

1.0111

0.1110

1,1011

1,0100

0,0111

x

-0.0100

-0.0111

0.1110

-1

-1011

-100

0,0111

-10000

 

6. 设机器数字长为8位(含1位符号位在内),分整数和小数两种情况讨论真值x为何值时,[x]=[x]成立。

解:当x为小数时,若x³ 0,则  [x]=[x]成立;

若x < 0,当x= -1/2时,[x]=[x]=1.100 0000,则  [x]=[x]成立。

当x为整数时,若x³0,则  [x]=[x]成立;

若x< 0,当x= -64时,[x]=[x]=1,100 0000,则 [x]=[x]成立。

 

7. 设x为真值,x*为绝对值,说明[-x*]=[-x]能否成立。

解:当x为真值,x*为绝对值时,[-x*]=[-x]不能成立。原因如下:

(1)当x<0时,由于[-x*]是一个负值,而[-x]是一个正值,因此此时[-x*]=[-x]不成立;

(2)当x³0时,由于-x*=-x,因此此时 [-x*]=[-x]的结论成立。

 

8. 讨论若[x]>[y],是否有x>y?

解:若[x]>[y],不一定有x>y。 [x]补 > [y]补时 x > y的结论只在 x > 0且y > 0,及 x<0且y<0时成立。

由于正数补码的符号位为0,负数补码的符号位为1,当x>0、 y<0时,有x>y,但则[x]<[y];同样,当x<0、 y >0时,有x < y,但[x]>[y]

 

9. 当十六进制数9B和FF分别表示为原码、补码、反码、移码和无符号数时,所对应的十进制数各为多少(设机器数采用一位符号位)?

解:真值和机器数的对应关系如下:

9BH

原码

补码

反码

移码

无符号数

对应十进制数

-27

-101

-100

+27

155

FFH

原码

补码

反码

移码

无符号数

对应十进制数

-128

-1

-0

+128

256

 

10. 在整数定点机中,设机器数采用1位符号位,写出±0的原码、补码、反码和移码,得出什么结论?

解:0的机器数形式如下:(假定机器数共8位,含1位符号位在内)

真值

原码

补码

反码

移码

+0

0 000 0000

0 000 0000

0 000 0000

1 000 0000

-0

1 000 0000

0 000 0000

1 111 1111

1 000 0000

结论:0的原码和反码分别有+0和-0两种形式,补码和移码只有一种形式,且补码和移码数值位相同,符号位相反。

 

11. 已知机器数字长为4位(含1位符号位),写出整数定点机和小数定点机中原码、补码和反码的全部形式,并注明其对应的十进制真值。

整数定点机

小数定点机

原码

补码

反码

真值

原码

补码

反码

真值

0,000

0,000

0,000

+0

0.000

0.000

0.000

+0

0,001

0,001

0,001

1

0.001

0.001

0.001

0.125

0,010

0,010

0,010

2

0.010

0.010

0.010

0.250

0,011

0,011

0,011

3

0.011

0.011

0.011

0.375

0,100

0,100

0,100

4

0.100

0.100

0.100

0.500

0,101

0,101

0,101

5

0.101

0.101

0.101

0.625

0,110

0,110

0,110

6

0.110

0.110

0.110

0.750

0,111

0,111

0,111

7

0.111

0.111

0.111

0.875

1,000

0,000

1,111

-0

1.000

0.000

1.111

-0

1,001

1,111

1,110

-1

1.001

1.111

1.110

-0.125

1,010

1,110

1,101

-2

1.010

1.110

1.101

-0.250

1,011

1,101

1,100

-3

1.011

1.101

1.100

-0.375

1,100

1,100

1,011

-4

1.100

1.100

1.011

-0.500

1,101

1,011

1,010

-5

1.101

1.011

1.010

-0.625

1,110

1,010

1,001

-6

1.110

1.010

1.001

-0.750

1,111

1,001

1,000

-7

1.111

1.001

1.000

-0.875

1,000

-8

1.000

-1

 

12. 设浮点数格式为:阶码5位(含1位阶符),尾数11位(含1位数符)。写出51/128、-27/1024、7.375、-86.5所对应的机器数。要求如下:

(1)阶码和尾数均为原码。

(2)阶码和尾数均为补码。

(3)阶码为移码,尾数为补码。

解:据题意画出该浮点数的格式:

阶符1位

阶码4位

数符1位

尾数10位

将十进制数转换为二进制:x1= 51/128= 0.0110011B= 2-1 * 0.110 011B

x2= -27/1024= -0.0000011011B = 2-5*(-0.11011B)

x3=7.375=111.011B=23*0.111011B

x4=-86.5=-1010110.1B=27*(-0.10101101B)

则以上各数的浮点规格化数为:

(1)[x1]浮=1,0001;0.110 011 000 0

[x2]浮=1,0101;1.110 110 000 0

[x3]浮=0,0011;0.111 011 000 0

[x4]浮=0,0111;1.101 011 010 0

(2)[x1]浮=1,1111;0.110 011 000 0

[x2]浮=1,1011;1.001 010 000 0

[x3]浮=0,0011;0.111 011 000 0

[x4]浮=0,0111;1.010 100 110 0

(3)[x1]浮=0,1111;0.110 011 000 0

[x2]浮=0,1011;1.001 010 000 0

[x3]浮=1,0011;0.111 011 000 0

[x4]浮=1,0111;1.010 100 110 0

 

13. 浮点数格式同上题,当阶码基值分别取2和16时:

(1)说明2和16在浮点数中如何表示。

(2)基值不同对浮点数什么有影响?

(3)当阶码和尾数均用补码表示,且尾数采用规格化形式,给出两种情况下所能表示的最大正数和非零最小正数真值。

解:(1)阶码基值不论取何值,在浮点数中均为隐含表示,即:2和16不出现在浮点格式中,仅为人为的约定。

(2)当基值不同时,对数的表示范围和精度都有影响。即:在浮点格式不变的情况下,基越大,可表示的浮点数范围越大,但浮点数精度越低。

(3)r=2时,

最大正数的浮点格式为:0,1111;0.111 111 111 1

其真值为:N+max=215×(1-2-10)

非零最小规格化正数浮点格式为:1,0000;0.100 000 000 0

其真值为:N+min=2-16×2-1=2-17

r=16时,

最大正数的浮点格式为:0,1111;0.1111 1111 11

其真值为:N+max=1615×(1-2-10

非零最小规格化正数浮点格式为:1,0000;0.0001 0000 00

其真值为:N+min=16-16×16-1=16-17

 

14. 设浮点数字长为32位,欲表示±6万间的十进制数,在保证数的最大精度条件下,除阶符、数符各取1位外,阶码和尾数各取几位?按这样分配,该浮点数溢出的条件是什么?

解:若要保证数的最大精度,应取阶码的基值=2。

若要表示±6万间的十进制数,由于32768(215)< 6万 <65536(216),则:阶码除阶符外还应取5位(向上取2的幂)。

故:尾数位数=32-1-1-5=25位

25(32) 该浮点数格式如下:

阶符(1位)

阶码(5位)

数符(1位)

尾数(25位)

按此格式,该浮点数上溢的条件为:阶码³25

 

15. 什么是机器零?若要求全0表示机器零,浮点数的阶码和尾数应采取什么机器数形式?

解:机器零指机器数所表示的零的形式,它与真值零的区别是:机器零在数轴上表示为“0”点及其附近的一段区域,即在计算机中小到机器数的精度达不到的数均视为“机器零”,而真零对应数轴上的一点(0点)。若要求用“全0”表示浮点机器零,则浮点数的阶码应用移码、尾数用补码表示(此时阶码为最小阶、尾数为零,而移码的最小码值正好为“0”,补码的零的形式也为“0”,拼起来正好为一串0的形式)。

 

16.设机器数字长为16位,写出下列各种情况下它能表示的数的范围。设机器数采用一位符号位,答案均用十进制表示。

(1)无符号数;

(2)原码表示的定点小数。

(3)补码表示的定点小数。

(4)补码表示的定点整数。

(5)原码表示的定点整数。

(6)浮点数的格式为:阶码6位(含1位阶符),尾数10位(含1位数符)。分别写出其正数和负数的表示范围。

(7)浮点数格式同(6),机器数采用补码规格化形式,分别写出其对应的正数和负数的真值范围。

解:(1)无符号整数:0 ~ 216 - 1,即:0~ 65535;

无符号小数:0 ~ 1 - 2-16 ,即:0 ~ 0.99998;

(2)原码定点小数:-1 + 2-15~1 - 2-15 ,即:-0.99997~0.99997

(3)补码定点小数:- 1~1 - 2-15 ,即:-1~0.99997

(4)补码定点整数:-215~215 - 1 ,即:-32768~32767

(5)原码定点整数:-215 + 1~215 - 1,即:-32767~32767

(6)据题意画出该浮点数格式,当阶码和尾数均采用原码,非规格化数表示时:

最大负数= 1,11 111;1.000 000 001 ,即 -2-9´2-31

最小负数= 0,11 111;1.111 111 111,即 -(1-2-9)´231

则负数表示范围为:-(1-2-9)´231 —— -2-9´2-31

最大正数= 0,11 111;0.111 111 111,即 (1-2-9)´231

最小正数= 1,11 111;0.000 000 001,即 2-9´2-31

则正数表示范围为:2-9´2-31 ——(1-2-9)´231

(7)当机器数采用补码规格化形式时,若不考虑隐藏位,则

最大负数=1,00 000;1.011 111 111,即 -2-1´2-32

最小负数=0,11 111;1.000 000 000,即 -1´231

则负数表示范围为:-1´231 —— -2-1´2-32

最大正数=0,11 111;0.111 111 111,即 (1-2-9)´231

最小正数=1,00 000;0.100 000 000,即 2-1´2-32

则正数表示范围为:2-1´2-32 ——(1-2-9)´231

 

17. 设机器数字长为8位(包括一位符号位),对下列各机器数进行算术左移一位、两位,算术右移一位、两位,讨论结果是否正确。

[x1]=0.001 1010;[y1]=0.101 0100;[z1]=1.010 1111;

[x2]=1.110 1000;[y2]=1.110 1000;[z2]=1.110 1000;

[x3]=1.001 1001;[y3]=1.001 1001;[z3]=1.001 1001。

解:算术左移一位:

[x1]=0.011 0100;正确

[x2]=1.101 0000;溢出(丢1)出错

[x3]=1.011 0010;正确

[y1]=0.010 1000;溢出(丢1)出错

[y2]=1.101 0000;正确

[y3]=1.011 0010;溢出(丢0)出错

[z1]=1.101 1111;溢出(丢0)出错

[z2]=1.101 0001;正确

[z3]=1.011 0011;溢出(丢0)出错

算术左移两位:

[x1]=0.110 1000;正确

[x2]=1.010 0000;溢出(丢11)出错

[x3]=1.110 0100;正确

[y1]=0.101 0000;溢出(丢10)出错

[y2]=1.010 0000;正确

[y3]=1.110 0100;溢出(丢00)出错

[z1]=1.011 1111;溢出(丢01)出错

[z2]=1.010 0011;正确

[z3]=1.110 0111;溢出(丢00)出错

算术右移一位:

[x1]=0.000 1101;正确

[x2]=1.011 0100;正确

[x3]=1.000 1100(1);丢1,产生误差

[y1]=0.010 1010;正确

[y2]=1.111 0100;正确

[y3]=1.100 1100(1);丢1,产生误差

[z1]=1.101 0111;正确

[z2]=1.111 0100(0);丢0,产生误差

[z3]=1.100 1100;正确

算术右移两位:

[x1]=0.000 0110(10);产生误差

[x2]=1.001 1010;正确

[x3]=1.000 0110(01);产生误差

[y1]=0.001 0101;正确

[y2]=1.111 1010;正确

[y3]=1.110 0110(01);产生误差

[z1]=1.110 1011;正确

[z2]=1.111 1010(00);产生误差

[z3]=1.110 0110(01);产生误差

 

18. 试比较逻辑移位和算术移位。

解:逻辑移位和算术移位的区别:

逻辑移位是对逻辑数或无符号数进行的移位,其特点是不论左移还是右移,空出位均补0,移位时不考虑符号位。

算术移位是对带符号数进行的移位操作,其关键规则是移位时符号位保持不变,空出位的补入值与数的正负、移位方向、采用的码制等有关。补码或反码右移时具有符号延伸特性。左移时可能产生溢出错误,右移时可能丢失精度。

 

19. 设机器数字长为8位(含1位符号位),用补码运算规则计算下列各题。

(1)A=9/64, B=-13/32,求A+B。

(2)A=19/32,B=-17/128,求A-B。

(3)A=-3/16,B=9/32,求A+B。

(4)A=-87,B=53,求A-B。

(5)A=115,B=-24,求A+B。

解:(1)A=9/64= 0.001 0010B, B= -13/32= -0.011 0100B

      [A]补=0.001 0010, [B]补=1.100 1100

[A+B]补= 0.0010010 + 1.1001100 = 1.1011110 ——无溢出

A+B= -0.010 0010B = -17/64

(2)A=19/32= 0.100 1100B, B= -17/128= -0.001 0001B

        [A]补=0.100 1100, [B]补=1.110 1111 , [-B]补=0.001 0001

[A-B]补= 0.1001100 + 0.0010001= 0.1011101 ——无溢出

A-B= 0.101 1101B = 93/128B

(3)A= -3/16= -0.001 1000B, B=9/32= 0.010 0100B

    [A]补=1.110 1000, [B]补= 0.010 0100

[A+B]补= 1.1101000 + 0.0100100 = 0.0001100 —— 无溢出

A+B= 0.000 1100B = 3/32

(4) A= -87= -101 0111B, B=53=110 101B

      [A]补=1 010 1001, [B]补=0 011 0101, [-B]补=1 100 1011

[A-B]补= 1 0101001 + 1 1001011 = 0 1110100 —— 溢出

(5)A=115= 111 0011B, B= -24= -11 000B

    [A]补=0 1110011, [B]补=1,110 1000

[A+B]补= 0 1110011 + 1 1101000 = 0 1011011——无溢出

A+B= 101 1011B = 91

 

20. 用原码一位乘、两位乘和补码一位乘(Booth算法)、两位乘计算x·y。

(1)x= 0.110 111,y= -0.101 110;

(2)x= -0.010 111,y= -0.010 101;

(3)x= 19,y= 35;

(4)x= 0.110 11,y= -0.111 01。

解:先将数据转换成所需的机器数,然后计算,最后结果转换成真值。

(1)[x]=0.110111,[y]=1.101110,x*=0.110111, y*=0.101110

原码一位乘:

部分积

乘数y*

说明

0.000 000

+0.000 000

101 110

部分积初值为0,乘数为0加0

0.000 000

0.000 000

+0.110 111

010 111

右移一位

乘数为1,加上x*

0.110 111

0.011 011

+0.110 111

101 011

右移一位

乘数为1,加上x*

1.010 010

0.101 001

+0.110 111

010 101

右移一位

乘数为1,加上x*

1.100 000

0.110 000

+0.000 000

001 010

右移一位

乘数为0,加上0

0.110 000

0.011 000

+0.110 111

000 101

右移一位

乘数为1,加上x*

1.001 111

0.100 111

100 010

右移一位

即x*×y*=0.100 111 100 010,z0=x0Å y0=0 Å1=1,

[x×y]=1.100 111 100 010,x·y= -0. 100 111 100 010

原码两位乘:[-x*]=1.001 001,2x*=1.101 110

部分积

乘数y*

Cj

说明

000 . 000 000

+001 . 101 110

00 101 110

0

部分积初值为0,Cj=0

根据yn-1ynCj=100,加2x*,保持Cj=0

001 . 101 110

 

0

 

000 . 011 011

+111 . 001 001

10 001 011

10 001 011

0

右移2位

根据yn-1ynCj=110,加[-x*],置Cj=1

111 . 100 100

111 . 111 001

+111 . 001 001

00 100 010

1

右移2位

根据yn-1ynCj=101,加[-x*],置Cj=1

111 . 000 010

111 . 110 000

+000 . 110 111

10 001 000

1

右移2位

根据yn-1ynCj=001,加x*,保持Cj=0

000 . 100 111

10 001 0

   

即x*×y*=0.100 111 100 010,z0=x0Å y0=0 Å1=1,

[x×y]=1.100 111 100 010,x·y= -0. 100 111 100 010

补码一位乘:[x]=0.110111,[-x]=1.001001,[y]=1.010010

部分积

乘数

Yn+1

说明

00 . 000 000

00 . 000 000

+11 . 001 001

1 010 010

0 101 001

0

0

Ynyn+1=00,部分积右移1位

Ynyn+1=10,部分积加[-x]

11 . 001 001

   

右移1位

11 . 100 100

+00 . 110 111

1 010 100

1

Ynyn+1=01,部分积加[x]

00 . 011 011

   

右移1位

00 . 001 101

00 . 000 110

+11 . 001 001

1 101 010

1 110 101

0

0

Ynyn+1=00,部分积右移1位

Ynyn+1=10,部分积加[-x]

11 . 001 111

   

右移1位

11 . 100 111

+00 . 110 111

1 111 010

1

Ynyn+1=01,部分积加[x]

00 . 011 110

00 . 001 111

+11 . 001 001

0 111 101

0

右移1位

Ynyn+1=10,部分积加[-x]

11 . 011 000

0 111 10

 

即 [x×y]=1.011 000 011 110,x·y= –0.100 111 100 010

 

26.按机器补码浮点运算步骤,计算[x±y]补.

(1)x=2-011× 0.101 100,y=2-010×(-0.011 100);

(2)x=2-011×(-0.100 010),y=2-010×(-0.011 111);

(3)x=2101×(-0.100 101),y=2100×(-0.001 111)。

解:先将x、y转换成机器数形式:

1x=2-011× 0.101 100,y=2-010×(-0.011 100)

[x]补=1,101;0.101 100, [y]补=1,110;1.100 100

[Ex]补=1,101, [y]补=1,110, [Mx]补=0.101 100, [My]补=1.100 100

1)对阶:

[DE]补=[Ex]补+[-Ey]补 = 11,101+ 00,010=11,111 < 0,

应Ex向Ey对齐,则:[Ex]补+1=11,101+00,001=11,110 = [Ey]补

[x]补=1,110;0.010 110

2)尾数运算:

  [Mx]补+[My]补= 0.010 110 + 11.100 100=11.111010

[Mx]补+[-My]补=0.010 110 + 00.011100= 00.110 010

3)结果规格化:

  [x+y]补=11,110;11.111 010 = 11,011;11.010 000 (尾数左规3次,阶码减3)

  [x-y]补=11,110;00.110 010, 已是规格化数。

4)舍入:无

5)溢出:无

则:x+y=2-101×(-0.110 000)

    x-y =2-010×0.110 010

2x=2-011×(-0.100010),y=2-010×(-0.011111)

    [x]补=1,101;1.011 110, [y]补=1,110;1.100 001

1)对阶:过程同(1)的1),则

[x]补=1,110;1.101 111

2)尾数运算:

    [Mx]补+[My]补= 11.101111 + 11. 100001 = 11.010000

    [Mx]补+[-My]补= 11.101111 + 00.011111 = 00.001110

3)结果规格化:

[x+y]补=11,110;11.010 000,已是规格化数

[x-y]补=11,110;00.001 110 =11,100;00.111000 (尾数左规2次,阶码减2)

4)舍入:无

5)溢出:无

则:x+y=2-010×(-0.110 000)

    x-y =2-100×0.111 000

3x=2101×(-0.100 101),y=2100×(-0.001 111)

    [x]补=0,101;1.011 011, [y]补=0,100;1.110 001

1)对阶:

[DE]补=00,101+11,100=00,001 >0,应Ey向Ex对齐,则:

[Ey]补+1=00,100+00,001=00,101=[Ex]补

[y]补=0,101;1.111 000(1)

2)尾数运算:

  [Mx]补+[My]补= 11.011011+ 11.111000(1)= 11.010011(1)

  [Mx]补+[-My]补= 11.011011+ 00.000111(1)= 11.100010(1)

3)结果规格化:

  [x+y]补=00,101;11.010 011(1),已是规格化数

  [x-y]补=00,101;11.100 010(1)=00,100;11.000 101 (尾数左规1次,阶码减1)

4)舍入:

[x+y]补=00,101;11.010 011(舍)

[x-y]补 不变

5)溢出:无

则:x+y=2101×(-0.101 101)

x-y =2100×(-0.111 011)

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有