计算机系统概论(原书第2版)完整课后习题答案(一、二章)

小编在学计系1的时候,一直找不到中文版的答案,英文版的答案又要钱才能下载,而且这个书翻译的真的牛(cai)逼……有的题目有歧义或者直接翻译有问题,有的直接把题目搞错的,思考很久都没有结果……然后又要去找英文原版的书去查,真的很搞心态啊……所以分享出来希望对友友萌有帮助~

不要抄作业啦~还是要好好学习滴!

有问题欢迎大家在评论区留言,这是部分教材习题答案,更加详细的我会逐步更新最近有点忙哈哈哈

其他章的链接

一、二章

第三章

第四章

伍六七章

八九十章

目录

第一章

1.5 

1.12

​1.13

1.22

1.23

 第二章 bit 数据类型及其运算

2.11

2.17

2.56 往年考过!一定要懂做题的思路

2.27

 2.34 逻辑运算

 2.37


第一章

1.1

试解释1.5节中两个重要思想中的第一个。
所有计算机的模型都是一样的,只要输入是一样的,输出结果也是一样的。


1.2

试问,同汇编语言相比,高级语言是否能向底层计算机表述更多的计算方式?
不能。因为高级语言与底层计算机的相关性很弱,而汇编语言则是与执行程序的计算机密切相关的。

1.3

试问,是什么原因使得模拟计算机难以实现,从而使设计者转向采用数字设计?
因为模拟计算机(机械设备就属于模拟计算机)很难提高精度,而数字计算机可以。


1.4

列举自然语言的特征之一,说明它为什么不适合直接作为编程语言?
自然语言有二义性,而计算机其实很笨,需要明确的指令去执行,二义性的语言容易产生歧义,让计算机无法执行。


1.5 

1.6

试用自然语言写一句话,然后给出这句话可能的两种解释。

我去(可能是语气词,也可能代表我要去什么地方)

1.7

1.3.1节有关抽象的讨论给出的结论是:如果“底层所有一切都很好“,我们是没有必要去理解这些部件的组成的。但如果情况并不良好,我们还是要学会分解部件。在出租车的例子中,你并不知道怎样才能到达机场。采用抽象的方法,你只需要简单地告诉司机“带我去飞机场“即可。解释在什么情况下这种方法是有效的,在什么情况下会起到反作用。
当抽象可以解决问题的时候,这种方法是有效的。当抽象不能解决问题时,比如,想要知道去飞机场的具体路线,这时用抽象反而会起到反作用。
 

1.8

John说:“I saw the man in the park with a telescope.“。这意味着什么?对这句话有多少种可能的解释?请列出来。这句话具备的什么特性,使得它如果出现在程序中是无法接受的?
我在公园看见那个人拿着电话。
我看见那个人在公园拿着电话。
这句话具有二义性,出现在程序中是无法接受的。
 

1.9

试问,自然语言可以表达算法吗?
当然可以,但是表达的内容不能具有二义性。

1.10

给出算法的三个特性,并给出简单的解释。
(1)确定性。表述清晰,没有二义性。
(2)可计算性。可以被计算机执行。
(3)有限性。能够终止。

1.11

针对算法的每个特性,分别给出一个例子,在例子代码中,都缺少这个特性,说明此时为什么不能说它是一个算法。
(1)确定性。如果缺少确定性,比如,要求给我一个数,这里就没有明确给我一个什么样的数。整数?负数?素数?实数?此时就不是一个算法。
(2)可计算性。如果缺少可计算性,比如,求最大的一个数,最大的数无法计算,此时就不是一个算法。
(3)有限性。如果缺少有限性,比如,要求循环打印一句话,没有告诉循环打印多少次,程序将一直执行,此时就不是一个算法。
 

1.12

 

 

 

老师给的参考答案:

1.13

 

1.14 冒泡排序

假设我们试图对一组名字做字母排序(sorting)。有一种算法为“冒泡排序(bubble sort)“;我们用C语言编写这个算法,对其编译并运行在x86 ISA的机器上;x86 ISA可以实现为Pentium IV微结构的方式。我们称这样一个序列为“冒泡排序、C语言编程、x86 ISA、Pentium IV微结构“的转换过程(transformation process)。再假设我们有四种排序算法,且可以用5种语言编程(C、C++、Pascal、Fortran、COBOL);有面向x86和SPARC两种ISA的编译器,且有三种x86的微结构实现、3种SPARC的微结构实现。请问:
a.共有多少种转换过程?4*5*2*3=120种
b.列举其中三种转换工程;

(那我们随便排列组合一下就行)
排序1、C语言编程、x86 ISA、SPARC I微结构
排序2、COBOL语言编程、SPARC ISA、SPARC II微结构
排序4、C++语言编程、x86 ISA、SPARC III微结构
c.如果x86的微结构是2种(而不是3种),SPARC的微结构是4种(而不是3种),那么共有多少种转换过程?(这个其实我不理解,看英文版答案的……大家可以讨论下)
4*5*(2+4)=120种
 

1.15

将高级语言和底层语言相比较,列举一个优点、一个缺点。
高级语言:优点,与自然语言比较接近,简单易懂。缺点,与底层计算机相关性很弱。
底层语言:优点,与底层计算机密切相关。缺点,晦涩难懂。

1.16 考试填空考过……

列举至少三个ISA定义所包含的内容。
操作数、数据类型、寻址模式

1.17考试简答考过

简单描述ISA和微结构之间的区别。
ISA是指令集架构,微结构是ISA的实现,ISA是微结构的定义。

1.18

一种微结构可以实现多少种ISA?再反问,一种ISA可以在多少种微结构上实现?
一种微结构只能实现一种ISA。ISA可以在多种微结构上实现。

1.19

列出转换过程的所有层次,并在每层中找一个例子。
问题:10个1相加等于几?
算法:读取数字1,与之前的结果累加,循环以上步骤10次
语言:C、C++、Java语言
机器(ISA)结构:x86
微结构:Intel 酷睿7代
电路:加法器
器件:CMOS电路、NMOS电路

1.20

图1-6所示的转换层通常又被称为是不同的抽象层次。你认为这种说法是否合理?试用例子加以解释。

合理。图1-6就是提出从问题描述到电子运转的整个过程。我们称这个过程的每个步骤为转换层次,其中每一层都有多种选择。例子就……跟1.19类似。

1.21

假设你去商店购买字处理软件。请问该软件通常以什么方式存在?是高级语言方式或是汇编语言?或是与你的计算机ISA兼容的格式?请回答。


与计算机ISA兼容的格式。因为程序软件需要在计算机上运行,首先必须能够执行计算机上的指令。

1.22

1.23


第二章 bit 数据类型及其运算

2.1

一个n-bit数可以表示多少个不同的二进制数?
2的n次方个。

2.2

如果采用二进制bit串来表示英语中的26个字母,至少需要多少个bit?如果还要区分大小写字母,又需要多少个bit?
=32 表示26个字母需要5个bit
26=64 表示区分大小写的26的字母需要6个bit

2.3

a.假设某班级有400个学生,如果我们为每个学生分配一个唯一的二进制bit串,那么至少需要多少个bit来表示所有的学生?
2^9=512 表示400个学生,需要9个bit
b.如果不再增加bit数,这个班最多还能增加多少个学生?
512-400=112 还可以增加112个学生

2.4


给定n位(bit),它可以表示多少个不同的无符号整数?范围是多大?
2^n无符号整数 范围是:0~2^(n-1)

2.5

如果用5-bit二进制串表示数值,写出数值7和-7分别对应的反码、符号位码和补码表示方式。
参考16页"补码"
7:00111
反码:00111
符号位码:00111
补码:00111
-7:11001
反码:11000
符号位码:10111
补码:11001

2.6


试用6-bit反码表示数值-32。(英文版本:“Write the 6-bit 2’s complement representation of -32.”,翻译错了吧,应该是要求用补码表示数值-32吧 )
6-bit补码表示-32:100000

2.7


试列出4-bit二进制补码所能表示的所有整数。
0000:0
0001:1
0010:2
0011:3
0100:4
0101:5
0110:6
0111:7
1000:-8
1001:-7
1010:-6
1011:-5
1100:-4
1101:-3
1110:-2
1111 :-1

2.8

a.8-bit二进制补码能表示的最大正整数是多少?分别写出十进制和二进制数。
最大正整数:0111 1111,就是2^7-1,就是127

b.8-bit二进制补码能表示的具有最大绝对值的负数是多少?分别写出十进制和二进制数。
答案:-2^7
十进制表示:-128
二进制表示:10000000


c.n-bit二进制补码能表示的最大正整数是多少?
2的n-1次方-1
d.n-bit二进制补码能表示的具有最大绝对值的负数是多少?
(-2)的n-1次方

2.9

如果用二进制补码方式表示摩尔常数6.0x10^2^3,需要多少bit?
80bit:01111111000011100001000010101111010001111100000111001000000000000000000000000000

2.10

将下面的二进制补码转换为十进制数:(要注意,补码是有符号位的)
a.1010:-6
b.01011010:90
c.11111110:-2
d.0011100111010011:14803
 

2.11

2.12

二进制补码最后一位如果是0,那么这个数必然是偶数。如果二进制补码的最后两位都为0(例如二进制数01100),那么这种数有什么特点?
是4的倍数,因为这个数是左移两位就是4倍

2.13

请将下面的二进制数改写为8-bit数,且不允许改变其原有数值。
a.1010:11111010(符号位拓展,负数补1,正数补0)
b.011001:00011001
c.1111111000:11111000
d.01:00000001

2.14

计算下列二进制加法,结果仍然表示为二进制数。
a. 1011+0001:1100
b. 0000+1010:1010
c. 1100+0011:1111
d. 0101+0110:01011
e. 1111+0001:10000

2.15


在本章例2-5中,证明了一个二进制数左移1位等价于将该数值乘2。试问,如果将其右移1位,等价于什么操作呢?
右移一位等价于除2

2.16


计算以下8-bit加法的结果,并分别写出结果所对应的二进制和十进制数。
a. 7的反码加上-7的反码;11111111和-0
b. 7的符号位表示加上-7的符号位表示;10001110和-14
c. 7的补码加上-7的补码;00000000和0

2.17

2.18

计算以下无符号二进制数的加法,并将结果转换为十进制形式。
a. 01+1011:

答案是二进制表示是:1100,十进制是:12


b. 11+01010101:01011000和88
c. 0101+110:1011和11
d. 01+10:11和3

2.19

将十进制数-27分别转换为8-bit补码、16-bit补码和32-bit补码,并阐述符号扩展在这三种表达形式中的应用。
11100101
1111111111100101
11111111111111111111111111100101
符号扩展用于不同bit位的加法运算中
在以下4-bit补码运算中,其中哪些计算会产生溢出?请将操作数和计算结果分别改写为十进制方式予以验证。
a. 110+0011:结果1,不会溢出(英文版中,原题是1100+0011:结果-1,没有溢出)
b. 1100+0100:结果0,不会溢出
c. 0111+0001:结果-8,溢出,因为两个正数相加结果为负数
d. 1000-0001:结果7,溢出,因为两个负数相加结果为正数
e. 0111+1001:结果0,不会溢出
试描述在什么情况下,两个补码相加将产生溢出。
两个正数相加,或者两个负数相加
试给出两个16-bit补码相加产生溢出的例子。
0111 1111 1111 1111 + 0000 0000 0000 0001
1000 0000 0000 0000 - 0000 0000 0000 0001
试描述在什么情况下,两个无符号整数相加会产生溢出。
bit位数固定的时候,两个整数相加超过当前取值范围时。
试给出两个16-bit无符号数相加产生溢出的例子。
1111 1111 1111 1111 + 0000 0000 0000 0001
1111 1111 1111 1110 + 0000 0000 0000 0010
试解释,为什么在补码方式下负数和正数相加不会产生溢出?
因为正数和负数相加结果在取值范围之内。
将数值-64表示为二进制补码方式,并回答以下问题:
a. 最少需要多少bit?7个
b. 这些bit能够表示的最大正整数是多少(分别给出二进制和十进制数)?0111111和63
c. 这些bit能够表示的最大无符号整数是多少(分别给出二进制和十进制数)?1111111和127
LC-3是一个16-bit计算机,如果LC-3对补码0101010101010101和0011100111001111相加的结果为1000111100100100,请问该结果有问题吗?如果有,问题是什么?如果没有,为什么?
有问题,因为两个正数相加结果为负数
试阐述逻辑AND运算在什么条件下输出为1。
1 AND 1时结果为1
略。
求解下列逻辑运算结果,给出二进制表示。
a. 01010111 AND 11010111:01010111
b. 101 AND 110:100
c. 11100000 AND 10110100:10100000
d. 00011111 AND 10110100:00010100
e. (0011 AND 0110) AND 1101:0000
f. 0011 AND (0110 AND 1101):0000
试阐述逻辑OR运算在什么条件下输出为1。
0 OR 1
1 OR 0
1 OR 1
略。
求解下列逻辑运算结果:
a. 01010111 OR 11010111:11010111
b. 101 OR 110:111
c. 11100000 OR 10110100:11110100
d. 00011111 OR 10110100:10111111
e. (0101 OR 1100) OR 1101:1101
f. 0101 OR (1100 OR 1101):1101
求解下列逻辑运算结果:
a. NOT(1011) OR NOT(1100):0111
b. NOT(1000 AND (1100 OR 0101)):0111
c. NOT(NOT(1101)):1101
d. (0110 OR 0000) AND 1111:0110
试阐述,在本章例2-11中,屏蔽字的作用是什么?
不影响其他位的操作,通过屏蔽字仅对目标位进行操作。
略。
假设n、m、s都是4-bit补码数,且s是n和m相加的结果。如果只允许使用2.6节中介绍的逻辑运算,如何判断n和m相加的结果是否溢出?编写一个程序,输入n、m和s的值,如果n和m相加溢出,则输出1000;如果没有溢出,则输出0000。
第一步:通过AND将n和m的左侧第一位bit提取出来,在通过XOR比较两者是否相同,如果不相同则表示正数和负数相加,此时肯定不会溢出。
如果 (n AND 1000) XOR (m AND 1000) = 1000则返回0000表示不会溢出,否则继续判断
第二步:左侧第一位bit相同,如果两数相加没有溢出,则s的左侧第一位bit应该和n、m相同,如果相同则表示没有溢出,如果不同,则表示溢出。
如果(n AND 1000) XOR (s AND 1000) = 1000则返回0000表示没有溢出
如果(n AND 1000) XOR (s AND 1000) = 0000则返回1000表示溢出
假设n、m、s都是4-bit无符号整数,s是n和m相加的结果。如果只允许使用2.6节中介绍的逻辑运算,如何判断n和m相加的结果是否溢出?编写一个程序,输入n、m和s的值,如果n和m相加溢出,则输出1000;如果没有溢出,则输出0000。
第一步 (n OR m) AND 1000,如果为0000则代表肯定没有溢出直接返回,
第二步 ((n OR m) AND 1000) XOR (s AND 1000)将结果直接返回
将以下十进制数转换成IEEE浮点数方式。
a. 3.75:0 10000000 11100000000000000000000
b. − 55 23 64 -55\frac{23}{64}−55 
64
23

 :1 10000100 10111010111000000000000
c. 3.1415927:0 10000000 10010010000000000000000(近似值,可以往下计算更加精确的值)
d. 64 000:0 10001110 11110100000000000000000
将以下IEEE浮点数转换为十进制数。
a. 0 10000000 00000000000000000000000:2
b. 1 10000011 0001000000000000000000:-17
c. 0 11111111 00000000000000000000000:2128
d. 1 10000000 10010000000000000000000:− 25 8 -\frac{25}{8}− 
8
25

 
a. 32-bit IEEE浮点数能表示的最大数值是多少?2129
b. 32-bit IEEE浮点数能表示的最小数值是多少?-2-149
一个程序员编写了一个两数求和的程序。但是运行后发现,5和8相加的结果是字符“m”,请分析造成这种奇怪现象的可能原因。
可能将5和8当作字符来相加,因为5和8对应的ASCII码分别为53和56,相加刚好是109对应的ASCII码中的字母m。
将以下十六进制ASCII码改写为8-bit二进制ASCII码。
a. x48656c6c6f21:Hello!
b. x68454c4cf21:hELLO!
c. x436f6d70757465727321:Computers!
d. x4c432d32:LC-2
如果要将数字3的二进制表示转传成字符“3”的ASCII码,请问如何操作?那么,数字4到字符“4”的转换呢?试问,是否任意数字都可以通过这种操作来转换?
可以通过3+47转换成字符“3”,只支持数字0~9的转换
将以下无符号数从二进制方式转换为十六进制方式。
a. 1101 0001 1010 1111:xd1af
b. 001 1111:x1f
c. 1:x1
d. 1110 1101 1011 0010:xedb2
将以下十六进制数转换为二进制形式。
a. x10:0001 0000
b. x801:1000 0000 0001
c. xF731:1111 0111 0011 0001
d. x0F1E2D:0000 1111 0001 1110 0010 1110
e. xBCAD:1011 1100 1010 1101
将以下十六进制补码转换为十进制数。
a. xF0:-16
b. x7FF:211-1或2047
c. x16:22
d. x8000:-215或-32768
将以下十进制数转换为二进制补码及其十六进制表示。
a. 256
b. 111
c. 123 456 789
d. -44
下面是十六进制表示的补码之间的运算。请问,能否不将它们展开为二进制方式,而直接计算各式的值,结果仍然采用十六进制表示。
a. x025B + x26DE
b. x7D96 + xF0A0
c. xA397 + xA35D
d. x7D96 + x7412
e. 对c和d的计算结果有什么补充吗?

2.50

下面是十六进制补码的逻辑运算。请问,能否不将它们展开为二进制方式,而直接计算各式的值,结果仍然采用十六进制表示。
a. x5478 AND Xfdea(英文版是xFDEA)
b. xABCD AND x1234
c. NOT(NOT(xDEFA)) AND (NOT(xFFFF))
d. x00FF XOR x325C

2.51

试写出以下数值的十六进制形式。
a. 25675
b. 675.625,IEEE 754浮点数标准形式
c. ASCII字符串:Hello

2.56 往年考过!一定要懂做题的思路

 

 

2.27

 2.34 逻辑运算

 2.37

 标准答案:

关注一下呀!后面持续更新(等暑假的时候康康有没有时间出一个完整版趴呜呜)

有疑惑评论区交流哈~

评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱喝橙汁的兔兔~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值