《计算机科学导论》课后习题 第3章 数据存储

发布时间 2023-11-20 13:34:58作者: Acolyte_9527

一、复习题

Q3-1 说出5种计算机可以处理的数据。

A:数字,文本,音频,图像,视频。

Q3-2 位模式的长度如何与其能表示的符号数量相关?

A:以b代表位模式的长度,a代表能表示符号的数量:a=2^ b。

Q3-3 位图方法是如何以位模式来表示一个图像的?

A:“位图方法”即“光栅图”,通过“扫描”将图像以一定的“解析度”,转化为数据密度随空间变化的像素编码。像素编码包含色彩,这些像素组成我们看到的图像。

Q3-4 矢量图方法优于位图方法的优点是什么?其缺点又是什么?

A:优点是放大和缩小图像不会影响图像质量,缺点是不适合用来储存细小精微、生动丰富的照片图像。

Q3-5 将音频数据转换为位模式需要哪些步骤?

A:1、采样。以一定的采样率采集声音样本。;2、量化。将声音样本的值截取为一个整数值;3、编码。将量化的样本值编码为位模式。

Q3-6 比较和对照在无符号、符号加绝对值以及二进制补码格式中的正整数的表示法。

A:见本章表3-1,不赘述。

Q3-7 比较和对照在无符号、符号加绝对值以及二进制补码格式中的负整数的表示法。

A:同样见本章表3-1。

Q3-8 比较和对照在符号加绝对值、二进制补码格式和余码格式中的0的表示法。

A:以4位存储单元为例。
符号加绝对值表示法有两个0值,分别为+0:0000,以及-0:1000。
二进制补码表示法中,0:0000。
余码表示法中,4位二进制数对应的是偏移量为7的系统,0:0111。

Q3-9 讨论在符号加绝对值和二进制补码格式中最左位扮演的角色。

A:在符号加绝对值格式中,最左位0代表正数,1代表负数。在二进制补码格式中,0代表非负数(因为包括了0),1代表负数。

Q3-10 回答以下关于实数浮点表示法的问题:

1、为什么需要规范化?
2、什么是尾数?
3、数字在规范化以后,何种信息被计算机存储在内存中?
A:
1、为了使表示法的固定部分统一。
2、尾数是指小数点右边的二进制数。
3、三种信息,分别是:符号,指数,尾数。

二、练习题

P3-1 我们可以有多少不同的5位模式?

A:2 ^ 5=32。
什么狗屎翻译。

P3-2 一些国家的车牌有两个十进制数码(0~9),我们可以有多少种不同的车牌?如果不允许使用数码0,又会有多少种不同的车牌?

A:10 ^ 2=100种。9 ^ 2=81种。

P3-3 用2个数码跟3个大写字母( A ~ Z )的车牌来重做上题。

A:10 ^ 2 × 26 ^ 3 =1757600。9 ^ 2 × 26 ^ 3 =1423656。

P3-4 一种机器有8个不同的圈。为表示每个圈需要多少位?

A:log_2(8)=3。

P3-5 学生在一门课程中的成绩可用 A 、 B 、 C 、 D 、 F 、 W (退学)或I(未完成)表示等级。表示这些等级需要多少位?

A:log_2(7)≈3。

P3-6 一个公司决定给每个员工分配唯一的位模式。如果该公司有900名雇员,构建该表示法的系统最少需要多少位?可分配多少位模式?如果再雇佣另外300名员工,系统需要增加位数吗?说明答案。

A:最少需要:log_2(900)≈10位。可分配:2 ^ 10=1024位模式。再雇佣300名需要增加位数至:log_2(900+300)≈11位。

P3-7 如果我们使用4位模式表示0~9的数码,将浪费多少位模式?

A:2 ^ 4-10=6。

P3-8 一个音频信号每秒钟采样8000次,每个样本有256级不同的表示。表示这个信号需要每秒多少位?

A:9000×log_2(256)=64000位/秒。

P3-9 将下列十进制数转换成8位无符号整数。

23=0001 0111
121=0111 1001
34=0010 0010
342=0101 0110,但是溢出,这个数码的值为86

P3-10 将下列十进制数转换成16位无符号整数。

41=0000 0000 0010 1001
411=0000 0001 1001 1011
1234=0000 0100 1101 0010
342=0000 0001 0101 0110

P3-11 将下列十进制数转换成8位二进制补码表示法。

8位二进制补码表示法的范围是-128~127
-12→12的8位二进制码为0000 1100→取补码1111 0100
-145→负溢出,对应的值应为128-(145-128)=111→8位二进制码为0110 1111
56=0011 1000
142→1000 1110,但是正溢出,这个数码的值为-114

P3-12 将下列十进制数转换成16位二进制补码表示法。

16位二进制补码表示法的范围是-32768~32767
102=0000 0000 0110 0110
-179→179的16位二进制码为0000 0000 1011 0011→取补码1111 1111 0100 1101
534=0000 0010 0001 0110
62056→1111 0010 0110 1000,但是正溢出,这个数码对应的值为-3480。

P3-13 将下列8位无符号整数转换成十进制数。

0110 1011=107
1001 0100=148
0000 0110=6
0101 0000=80

P3-14 将下列8位二进制补码表示的整数转换成十进制数。

0110 1011=107
1111 1100→取补码为0000 0100=4→即为-4
0111 0111=119
1100 1110→取补码为0011 0010=50→即为-50

P3-15 下面是一些二进制补码表示的二进制数。请问如何改变它们的正负。

直接取补码即可。
0111 0111→1000 1001
1111 1100→0000 0100
0111 0111→1000 1001
1100 1110→0011 0010

P3-16 如果在一个数上应用二进制补码表示法转换两次,将会得到原数。在下面的数上试试看。

试试就试试呗。(摊手)
0111 0111→1000 1001→0111 0111
1111 1100→000 0100→1111 1100
0111 0100→1000 1100→0111 0100
1100 1110→0011 0010→1100 1110

P3-17 将下面的二进制浮点数规范化。在规范化后详细指明指数的值是多少。

1.10001=2 ^ 0×1.10001,指数值为0
2 ^ 3×111.1111=2 ^ 5×1.111111,指数为5
2 ^ (-2)×101.110011=2 ^ 0×1.01110011,指数为0
2 ^ (-5)×101101.00000110011000=2 ^ 0×1.0110100000110011,指数为0

P3-18 将下面的数转换成32位 IEEE 格式。

S=1位,E=8位,M=23位,偏移量=127
-2 ^ 0×1.10001→S=1,E=0+127=127=0111 1111,M=10001
就写到这一步把,后面0太多,不写了
+2 ^ 3×1.111111→S=0,E=3+127=130=1000 0010,M=111111
+2 ^ (-4)×1.01110011→S=0,E=-4+127=123=0111 1011,M=01110011
+2 ^ (-5)×1.01101000→S=0,E=-5+127=122=0111 1010,M=01101

P3-19 将下面的数转换成64位 IEEE 格式。

S=1位,E=11位,M=52位,偏移量=1023
-2 ^ 0×1.10001→S=1,E=0+1023=1023=011 1111 1111,M=10001
+2 ^ 3×1.111111→S=0,E=3+1023=1026=100 0000 0010,M=01110011
+2 ^ (-4)×1.01110011→S=0,E=-4+1023=1019=011 1111 1011,M=01110011
+2 ^ (-5)×1.01101000→S=0,E=-5+1023=1018=011 1111 1010,M=01101

P3-20 将下面的数转换成32位的 IEEE 形式。

7.1875=111.0011=+2 ^ 2×1.110011→S=0,E=2+127=129=1000 0001,M=110011,后略。
-12.640625=-1100.101001=-2 ^ 3×1.100101001→S=1,E=3+127=130=1000 0010,M=100101001,后略。
11.40625=1011.01101=+2 ^ 3×1.01101101→S=0,E=3+127=130=1000 0010,M=01101101,后略
-0.375=-0.011=-2 ^ (-2)×1.1→S=1,E=-2+127=125=0111 1101,M=1,后略。

P3-21 将下列8位符号加绝对值表示的整数转换成十进制数。

01110111=+119
11111100=-124
01110100=+116
11001110=-78

P3-22 将下列十进制数转换成8位符号加绝对值表示法。

53=00110101
-107=11101011
-5=10000101
154→10011010,但是正溢出,这个数码对应的值为-26

P3-23 在计算机中表示有符号数字的方法之一是二进制反码。在这种表示法中,表示正数时我们将其直接存为二进制数字;表示负数时,对该数字进行二进制反码运算。将下列十进制数转换成8位二进制反码表示法。

53=00110101
-107=01101011→反码10010100
-5=00000101→反码11111010
154=10011010,但是溢出了,这个数码对应的值为-101。
和其他表示法一样,如果不规定范围,会分不清正负数。
若为了避免混淆,范围应该是-127到127。

P3-24 将下列8位二进制反码表示的数转换成十进制数。

假设不存在溢出,那么首位为1即为负数。
01110111=119
11111100→反码00000011→-3
01110100=116
11001110→反码00110001→-49

P3-25 如果在一个数上应用二进制反码表示法转换两次,将会得到原数。在下面的数上试试看。

01110111→10001000→01110111
11111100→00000011→11111100
01110100→10001011→01110100
11001110→00110001→11001110

P3-26 另一种求二进制补码的方法是首先转换成二进制反码表示法,然后把结果加1(二进制加法将在第4章讲解)。试用两种方法转换下面的数,分析比较结果。

这里只写反码加1方法,和直接写补码效果完全一致。
01110111→反码→10001000→加1→10001001
11111100→反码→00000011→加1→00000100
01110100→反码→10001011→加1→10001100
11001110→反码→00110001→加1→00110010

P3-27 在十进制数中,与二进制反码对等的称为十进制反码(1=2-1和9=10-1)。对于n位的单元,我们用十进制反码表示数字的范围是-[(10 ^ n/2)-1]+[(10 ^ n/2)-1]。带有 n 个数码的十进制反码数字通过下面的方法获得:如果数字为正,十进制反码就是其自身;如果数字为负,我们将每个数码减9。针对3个数码位的单元回答以下问题:

1、使用十进制反码可表示的数字范围是多少?
2、该系统中我们如何决定数字的符号?
3、在该系统中我们会有两个0吗?
4、如果3的答案是肯定的,表示+0和-0的是什么?
A:
1、-499到499
2、首位0-4为正数,5-9为负数。
3、会有+0和-0。
4、+0=000,-0=999
这道题里给出的的范例“1=2-1和9=10-1”令人迷惑,不太明白它想表达什么。

P3-28 求出下列数的十进制反码,假设只有3个数码位。

+234→765
+560→439
-125=874
-111=888
这里不考虑溢出。

P3-29 在十进制数中,与二进制补码对等的称为十进制补码(在二进制系统中,2是底;在十进制系统中,10是底)。对于 n 位的单元,我们用十进制补码表示数字的范围是:-(10 ^ n/2)到+(10 ^ n/2-1)。带有 n 个数码的十进制补码数字通过下面的方法获得:先求出该数字的十进制反码,接着给结果加1。针对3个数码位的单元回答以下问题:

1、使用十进制补码可表示的数字范围是多少?
2、该系统中我们如何决定数字的符号?
3、在该系统中我们会有两个0吗?
4、如果3的答案是肯定的,表示+0和-0的是什么?
A:
1、-500到499
2、首位0-4正数,5-9为负数。
3、不会。
4、只有一个0=000。

P3-30 求出下列数的十进制补码,假设只有3个数码位。

+234→766
+560→440
-125→875
-111→889
这里不考虑溢出。

P3-31 在十六进制数中,与二进制反码对等的称为十六进制反码(1=2-1和15=16-1)。

1、3个数码位使用十六进制反码可表示的数字范围是多少?
2、在十六进制系统中如何获得十六进制反码?
3、在该系统中我们会有两个0吗?
4、如果3的答案是肯定的,表示+0和-0的是什么?
A:
1、-2047到+2047(-7FF到7FF)
2、每一位数减F。
3、会。
4、+0=000,-0=FFF。

P3-32 求出下列数的十六进制反码,假设只有3个数码位。

+B14→4EB
+FE1→-01E
-1A→FE5
-1E2→E1D
这里不考虑溢出。

P3-33 在十六进制数中,与二进制补码对等的称为十六进制补码。

1、3个数码位使用十六进制补码可表示的数字范围是多少?
2、在十六进制系统中如何获得十六进制补码?
3、在该系统中我们会有两个0吗?
4、如果3的答案是肯定的,表示+0和-0的是什么?
A:
1、-2048到+2047(-800到7FF)。
2、反码加1。
3、不会。
4、只有一个0=000。

P3-34 求出下列数的十六进制补码,假设只有3个数码位。

+B14→4EB
+FE1→01E
-1A→FE5
-1E2→E1D
这里不考虑溢出。