文档库 最新最全的文档下载
当前位置:文档库 › 第二章习题答案(作业)(可编辑修改word版)

第二章习题答案(作业)(可编辑修改word版)

第二章习题答案(作业)(可编辑修改word版)
第二章习题答案(作业)(可编辑修改word版)

For personal use only in study and research; not for commercial use

第二章习题答案

2(1)为什么计算机内部采用二进制表示信息?既然计算机内部所有信息都用二进制表示,为什么还要用到十六进制和八进制数?

参考答案:(略)

2(7)为什么计算机处理汉字时会涉及到不同的编码(如,输入码、内码、字模码)?说明这些编码中哪些是用二进制编码,哪些不是用二进制编码,为什么?

参考答案:(略)

3. 实现下列各数的转换。

(1)

(2)(25.8125)

= (?)2= (?) 8= (?) 16

10

(3)

(4)(101101.011)

= (?)10= (?) 8= (?) 16= (?) 8421

2

(5)

(6)(0101 1001 0110.0011)

= (?)10= (?) 2= (?) 16

8421

(7)

(8)(4E.C)

= (?)10= (?) 2

16

参考答案:

(1)(25.8125)

= (1 1001.1101)2 = (31.64) 8 = (19.D) 16

10

(2)(101101.011)

= (45.375)10 = (55.3) 8 = (2D.6) 16 = (0100 0101.0011 0111 0101) 8421

2

(3)(0101 1001 0110.0011)

= (596.3)10= (1001010100.01001100110011…) 2= (254.4CCC…)

8421

16

(4)(4E.C)

= (78.75)10 = (0100 1110.11) 2

16

4. 假定机器数为8 位(1 位符号,7 位数值),写出下列各二进制数的原码和补码表示。+0.1001,–0.1001,+1.0,–1.0,+0.010100,–0.010100,+0,–0

参考答案:(后面添0)

原码补码

+0.1001:0.10010000.1001000

–0.1001: 1.1001000 1.0111000

+1.0:溢出溢出

–1.0:溢出 1.0000000

+0.010100:0.01010000.0101000

–0.010100: 1.0101000 1.1011000

+0:0.00000000.0000000

–0: 1.00000000.0000000

5. 假定机器数为8 位(1 位符号,7 位数值),写出下列各二进制数的补码和移码表示。+1001,–1001,+1,–1,+10100,–10100,+0,–0

参考答案:(前面添0)

移码补码

+1001:1000100100001001

–1001:0111011111110111

+1:1000000100000001

–1:01111111111111111

+10100:1001010000010100

–10100:0110110011101100

+0:1000000000000000

–0:1000000000000000

6. 已知[x]补,求x

(1)[x]补=1.1100111 (2)[x]补=10000000

(3)[x]补=0.1010010 (4)[x]补=11010011

参考答案:

(1)[x]补=1.1100111 x = –0.0011001B

(2)[x]补=10000000 x = –10000000B = –128

(3)[x]补=0.1010010 x = +0.101001B

(4)[x]补=11010011 x = – 101101B = – 45

7. 假定一台32 位字长的机器中带符号整数用补码表示,浮点数用IEEE 754 标准表示,寄存器R1 和R2的内容分别为R1:0000 017AH,R2:FFFF F895H。不同指令对寄存器进行不同的操作,因而,不同指令执行时寄存器内容对应的真值不同。假定执行下列运算指令时,操作数为寄存器R1 和R2 的内容,则R1 和R2 中操作数的真值分别为多少?

(1)

(2)无符号数加法指令

(3)

(4)带符号整数乘法指令

(5)

(6)单精度浮点数减法指令

参考答案:

R1 = 0000 017AH = 0000 0000 0000 0000 0000 0001 0111 1010

R2 = FFFF F895H = 1111 1111 1111 1111 1111 1000 1001 0101

(1)对于无符号数加法指令,R1和R2 中是操作数的无符号数表示,因此,其真值分别为R1:17AH,

R2:FFFF F895H。(对应十进制分别为378、4 294 965 397=232 –1899)

(2)对于带符号整数乘法指令,R1 和R2 中是操作数的带符号整数补码表示,由最高位可知,R1 为正数,R2 为负数。R1 的真值为+17AH=378, R2 的真值为–111 0110 1011= –1899。

(3)R1:符号位为0,表示其为正数,阶码为0000 0000,尾数部分为000 0000 0000 0001 0111 1010,故其为非规格化浮点数,指数为–126,尾数中没有隐藏的1,用十六进制表示尾数为+0.0000 0000 0000 0010 1111 0100=+0.0002F4H,故R1 表示的真值为+0.0002F4H × 2-126。

R2: 符号位为1,表示其为负数,阶码为1111 1111,尾数部分为111 1111 1111 1000

1001 0101,故其为全1 阶码非0 尾数,即是一个非数NaN。

8. 假定机器M 的字长为32 位,用补码表示带符号整数。下表第一列给出了在机器M 上执行的C 语言程序中的关系表达式,请参照已有的表栏内容完成表中后三栏内容的填写。

9. 以下是一个C 语言程序,用来计算一个数组a 中每个元素的和。当参数len 为0 时,返回值应该是0,但是在机器上执行时,却发生了存储器访问异常。请问这是什么原因造成的,并说明程序应该如何修改。

1 float sum_elements(float a[], unsigned len)

2 {

3 int i;

4 float result = 0;

5

6 for (i = 0; i <= len–1; i++)

7 result += a[i];

8 return result;

9 }

参考答案:

参数len 的类型是unsigned,所以,当len=0 时,执行len-1 的结果为11…1,是最大可表示的无符号数,因而,任何无符号数都比它小,使得循环体被不断执行,引起数组元素的访问越界,发生存储器访问异常。

只要将len 声明为int 型,或循环的测试条件改为i

10. 设某浮点数格式为:

其中,移码的偏置常数为16,补码采用一位符号位,基数为4。

(1)

(2)用这种格式表示下列十进制数:+1.75,+19,–1/8。

(3)

(4)写出该格式浮点数的表示范围,并与12 位定点补码整数表示范围比较。

参考答案:(假定采用0 舍1 入法进行舍入)

(1)+1.75 = +1.11B = 0.011100B× 41, 故阶码为1 +16 = 17 = 10001B, 尾数为+0.011100 的补码,

= 1.1100B× 40 =0 。130Q× 41 =1.30Q× 40

即0.011100,所以+1.75 表示为0 10001 011100。

+19 = +10011B = 0.010011B× 43,故阶码为3 + 16 = 19 = 10011B, 尾数为0.010011,所以+19 表示为0 10011 010011。

–1/8 = – 0.125 = – 0.001B = – 0.100000 × 4–1,

阶码为–1 + 16 = 15 = 01111B,尾数为– 0.100000 的补码,即1.100000,所以–1/8 表示为1 01111 100000。

(2)该格式浮点数表示的范围如下。

正数最大值:0.111111B × 411111,即:0.333× 415 (≈230 ≈109)

正数最小值:0.000001B × 400000,即:0.001Q× 4–16 (≈2–34≈10–10)

负数最大值:–0.000001B × 400000,即:–0.001× 4–16

负数最小值:–1.000000B × 411111,即:–1.000× 415

因此,该格式浮点数的数量级在10–10~109 之间。

12 位定点补码整数的表示范围为:–211~+(211–1),即:–2048~2047

由此可见,定点数和浮点数的表示范围相差非常大。

11. 下列几种情况所能表示的数的范围是什么?

(1)

(2)16 位无符号整数

(3)

(4)16 位原码定点小数

(5)

(6)16 位补码定点小数

(7)

(8)16 位补码定点整数

(9)

(10)下述格式的浮点数(基数为2,移码的偏置常数为128)

参考答案:

(1)无符号整数:0~216–1。

(2)原码定点小数:–(1–2–15) ~+ (1–2–15)。

(3)补码定点小数:–1 ~+ (1–2–15)。

(4)补码定点整数:–32768 ~+32767。

(5)浮点数:负数:– (1–2–7)×2+127 ~–2–7×2–128。

正数:+2–135 ~(1–2–7) ×2+127。

12. 以IEEE 754 单精度浮点数格式表示下列十进制数。

+1.75,+19,–1/8,258

参考答案:

+1.75 = +1.11B = 1.11B × 20, 故阶码为0+127=01111111B, 数符为0,尾数为1.110…0,小数点前为隐藏位,所以+1.7 表示为0 01111111 110 0000 0000 0000 0000 0000,用十六进制表示为3FE00000H。

+19 = +10011B = +1.0011B × 24,故阶码为4+127 = 10000011B, 数符为0,尾数为

1.00110…0,所以+19 表示为0 10000011 001 1000 0000 0000 0000 0000,用十六进制表示为

41980000H。

–1/8 = – 0.125 = – 0.001B = – 1.0 × 2–3,阶码为–3+127 = 01111100B,数符为1,尾数为

1.0…0,所以–1/8 表示为1 01111100 000 0000 0000 0000 0000 0000,用十六进制表示为

BE000000H。

258=100000010B=1.0000001B × 28, 故阶码为8+127=10000111B, 数符为0,尾数为

1.0000001,所以258 表示为0 10000111 000 0001 0000 0000 0000 0000,用十六进制表示为

43810000H。

13. 设一个变量的值为6144,要求分别用32 位补码整数和IEEE 754 单精度浮点格式表示该变量(结果用十六进制表示),并说明哪段二进制序列在两种表示中完全相同,为什么会相同?

参考答案:

6144 = +1 1000 0000 0000B = +1. 1× 212

32 位补码形式为:0000 0000 0000 0000 0001 1000 0000 0000 (00001800H)

IEEE754 单精度格式为:0 10001011 100 0000 0000 0000 0000 0000 (45C0 0000H)蓝字部分为除隐藏位外的有效数字,因此,在两种表示中是相同的序列。因为正数的补码和原码是一致的,所以除隐藏位外的有效数字都相同。

14. 设一个变量的值为–6144,要求分别用32 位补码整数和IEEE754 单精度浮点格式表示该变量(结果用十六进制表示),并说明哪种表示其值完全精确,哪种表示的是近似值。

参考答案:

–6144 = –1 1000 0000 0000B = –1. 1× 212

32 位补码形式为:1111 1111 1111 1111 1110 1000 0000 0000 (FFFF E800H)

IEEE 754 单精度格式为:1 10001011 100 0000 0000 0000 0000 0000 (C5C0 0000H)

32 位补码形式能表示精确的值,浮点数表示的也是精确值,因为没有有效数字被截断。

15. 下表给出了有关IEEE 754 浮点格式表示中一些重要数据的取值,表中已经有最大规格化数的相应内容,要求填入其他浮点数的相应内容。(注:表中a 代表一个在1 到10 之间的正纯小数)

16.已知下列字符编码:A=100 0001,a=110 0001,0=011 0000,求E、e、f、7、G、Z、5 的7 位ACSII 码和第一位前加入奇校验位后的8 位编码。

参考答案:

E 的ASCII 码为‘A’ + (‘E’ –‘A’) = 100 0001 + 100 = 100 0101, 奇校验位P = 0,第一位前加入奇校验位后的8 位编码是0 100 0101。

e 的ASCII 码为‘a’+ (‘e’ –‘a’) = 110 0001 + 100 = 110 0101,奇校验位P = 1, 第一位前加入奇校验位后的8 位编码是1 110 0101。

f 的ASCII 码为‘a’+ (‘f’ –‘a’) = 110 0001 + 101 = 110 0110, 奇校验位P = 1, 第一位前加入奇校验位后的8 位编码是1 110 0110。

7 的ASCII 码为‘0’+ (7 - 0) = 011 0000 + 111 = 011 0111,奇校验位P = 0, 第一位前加入奇校验位后的8 位编码是0 011 0111。

G 的ASCII 码为‘A’+ (‘G’ –‘A’) = 100 0001 + 0110 = 100 0111, 奇校验位P = 1, 第一位前加入奇校验位后的8 位编码是1 100 0111。

Z 的ASCII 码为‘A’+(‘Z’ –‘A’) = 100 0001 + 11001 = 101 1010, 奇校验位P = 1, 第一位前加入奇校验位后的8 位编码是1 101 1010。

5 的ASCII 码为‘0’+(5 – 0) = 011 0000 + 101 = 011 0101,奇校验位P = 1, 第一位前加入奇校验位后的8 位编码是1 011 0101。

17. 假定在一个程序中定义了变量x、y 和i,其中,x 和y 是float 型变量(用IEEE754 单精度浮点数表示),i 是16 位short 型变量(用补码表示)。程序执行到某一时刻,x = –10.125、y=12、i=–125,它们都被写到了主存(按字节编址),其地址分别是100,108 和112。请分别画出在大端机器和小端机器上变量x、y 和i 在内存的存放位置。

参考答案:

–10.125 = –1010.001B = –1.010001 × 23

x 在机器内部的机器数为:1 10000010 0100010…0 (C122 0000H)

12= +1100B= +1.1 × 23

y 在机器内部的机器数为:0 10000010 100…0 (4140 0000H)

–125=–111 1101B

i 在机器内部的机器数为:1111 1111 1000 0011

(FF83H)

大端机小端机

地址内容内容

100 C1H 00H

101 22H 00H

102 00H 22H

103 00H C1H

108 41H 00H

109 40H 00H

110 00H 40H

111 00H 41H

112 FFH 83H

113 83H FFH

18. 假定某计算机的总线采用偶校验,每8 位数据有一位校验位,若在32 位数据线上传输的信息是8F 3C AB 96H,则对应的4 个校验位应为什么?若接受方收到的数据信息和校验位分别为87 3C AB

96H 和1010B,则说明发生了什么情况,并给出验证过程。

参考答案:

传输信息8F 3C AB 96H 展开为1000 1111 0011 1100 1010 1011 1001 0110,每8 位有一个偶校验位,因此,总线上发送方送出的4 个校验位应该分别为1、0、1、0。

接受方的数据信息为87 3C AB 96H,展开后为1000 0111 0011 1100 1010 1011 1001 0110,接收到的校验位分别为1、0、1、0。

在接受方进行校验判断如下:

根据接收到的数据信息计算出4 个偶校验位分别为0、0、1、0,将该4 位校验位分别和接收到的4位校验位进行异或,得到1、0、0、0,说明数据信息的第一个字节发生传输错误。对照传输前、后

5 4 3 2 1 5

的数据信息,第一字节 8FH 变成了 87H ,说明确实发生了传输错误,验证正确。

19. 假定一个 16 位数据 M 16 M 15 M 14 M 13 M 12 M 11 M 10 M 9 M 8 M 7 M 6 M 5 M 4 M 3 M 2 M 1,写出 16 位数据的

SEC 码。假定数据为 0010 1000 1100 1010,说明 SEC 码如何正确检测数据位 5 的错误。参考答案:

对于 16 位数据, 可以如下插入校验位:

M 16 M 15 M 14 M 13 M 12 P 5 M 11 M 10 M 9 M 8 M 7 M 6 M 5 P 4 M 4 M 3 M 2 P 3 M 1 P 2 P 1

其中 M i 是原信息数据, P i 是加入的校验位, 对于各个校验位的值可以如下计算 P 1 = M 1⊕M 2⊕M 4⊕M 5⊕M 7⊕M 9⊕M 11⊕M 12⊕M 14⊕M 16 = 1 P 2 = M 1⊕M 3⊕M 4⊕M 6⊕M 7⊕M 10⊕M 11⊕M 13⊕M 14 = 1 P 3 = M 2⊕M 3⊕M 4⊕M 8⊕M 9⊕M 10⊕M 11⊕M 15⊕M 16 = 1 P 4 = M 5⊕M 6⊕M 7⊕M 8⊕M 9⊕M 10⊕M 11 = 0 P 5 = M 12⊕M 13⊕M 14⊕M 15⊕M 16 = 0

所以此时 P 5 P 4 P 3 P 2 P 1 = 00111,第五位数据出错时,数据字变为:0010 1000 1101 1010, P ’P ’P ’P ’P ’= 01110,故障字= 00111⊕01110 = 01001,说明码字第 9 位出错,即 M 出错。

20. 假设要传送的数据信息为:110010,若约定的生成多项式为:G(x)= x 3+1,则校验码为多少?假定

在接收端接收到的数据信息为 110011,说明如何正确检测其错误,写出检测过程。 参考答案:

原数据信息为 110010,对应的报文多项式为 M(x) = x 5 + x 4 + x, 生成多项式的位数为 4 位, 所以在原数据信息后面添加 3 个 0,变为 M ’(x) = x 3M(x) = x 8 + x 7 + x 4, 用 M ’(x)去模 2 除 G(x),得到的余数为 100, 所以得到 CRC 码为 110010 100。

检测时,用接收到的 CRC 码去模 2 除生成多项式 1001,若得到的余数为 0,则表明正确,否则说明传输时发生了错误。此题中接收到的 CRC 码为 110011 100(即数据 110011 加检验位 100),显然,用 110011 100 模 2 除 1001,得到余数为 001,不为 0,说明传输时发生

错误。

在网络通信中,一般不纠错,只要求重发。

仅供个人用于学习、研究;不得用于商业用途。For personal use only in study and research; not for commercial use.

Nur für den pers?nlichen für Studien, Forschung, zu kommerziellen Zwecken verwendet werden. Pour l 'étude et la recherche uniquement à des fins personnelles; pas à des fins commerciales.т о л ь кодля людей, которые используются для обучения, исследований и не должны использоваться в коммерческихцелях.

以下无正文

仅供个人用于学习、研究;不得用于商业用途。For personal use only in study and research; not for commercial use.

Nur für den pers?nlichen für Studien, Forschung, zu kommerziellen Zwecken verwendet werden. Pour l 'étude et la recherche uniquement à des fins personnelles; pas à des fins commerciales.т о л ь кодля людей, которые используются для обучения, исследований и не должны использоваться в коммерческихцелях.

以下无正文

相关文档