《计算机科学导论》课后习题 第2章 数字系统

发布时间 2023-11-16 16:18:07作者: Acolyte_9527

一、复习题

Q2-1 定义一个数字系统。

A:数字系统,使用特定符号和组合规则表示数字的系统。

Q2-2 辨析位置化和非位置化的数字系统。

A:

  • 位置化数字系统中,数字符号所占据的位置决定了其表示的值。
  • 非位置化数字系统同样使用有限的数字符号,每个符号有一个值,但符号的值都是固定的,符号的位置同符号的值无关。所有符号的值相加表示数字的值。

Q2-3 定义位置化数字系统的中的底和基数。位置化数字系统中,底与符号的数量有什么关系?

A:位置化数字系统中底(或称基数)为符号集中符号总数。

Q2-4 简述十进制系统。为什么称作十进制?该系统的底是多少?

A:英文decimal(十进制)的命名源于拉丁词根decem(十),可能因为十进制系统有{0,1,2,3,4,5,6,7,8,9}共十个数码。中文称之为“十进制”是因为这套数码在运算过程中“逢十进一”。底是10。

Q2-5 简述二进制系统。为什么称作二进制?该系统的底是多少?

A:英文binary(二进制)的命名源于拉丁词根bini(二),可能因为二进制系统有{0,1}两个数码。中文称之为“二进制”是因为这套数码在运算过程中“逢二进一”。底是2。

Q2-6 简述八进制系统。为什么称作八进制?该系统的底是多少?

A:英文octal(八进制)的命名源于拉丁词根octo(八),可能因为二进制系统有{0,1,2,3,4,5,6,7}共八个数码。中文称之为“八进制”是因为这套数码在运算过程中“逢八进一”。底是8。

Q2-7 简述十六进制系统。为什么称作十六进制?该系统的底是多少?

A:英文hexadecimal(十六进制)的命名源于拉丁词根hex(六)和decem(十),可能因为十六进制系统有{0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F}共十六个数码。中文称之为“十六进制”是因为这套数码在运算过程中“逢十六进一”。底是16。
关于Q2-4到Q2-7,一个位置化数字系统确定了符号集和底数之后还有什么好简述的呢?

Q2-8 为什么二进制和十六进制相互转换很容易?

A:因为每4位二进制数可以直接写为1位十六进制数。反过来,每1位十六进制数可以直接写为4位二进制数。

Q2-9 十六进制中1个数码表示二进制系统中的几位?

A:4位。

Q2-10 八进制中1个数码表示二进制系统中的几位?

A:3位。

二、练习题

P2-2 将下列二进制数转换为十进制数,不用计算器并写出计算过程:

01101=0×2^4 +1×2^3+ 1×2^2 +0×2^1 +1×2^0=13
1011000=1×2^6 +1×2^4+ 1×2^3=88
011110.01=1×2^4 +1×2^3 +1×2^2 +1×2^1 +1×2^(-2)=30.25
111111.111=1000000-0.001=1×2^6 -1×2^(-3)=64-0.125=63.875

P2-2 将下列十六进制数转换为十进制数,不用计算器并写出计算过程:

AB2=10×16^2 +11×16^1 +2×16^0=2738
123=1×16^2 +2×16+3=291
ABB=10×16^2 +11×16+11=2747
35E.E1=3×16^2 +5×16+14 +14×16^(-1) +16^(-2)=862.87890625

P2-3 将下列八进制数转换为十进制数,不用计算器并写出计算过程:

237=2×8^2 +3×8^1 +7×8^0=159
2731=2×8^3 +7×8^2 +7×3×8+1=1497
617.7=6×8^2+8+7 +7×8^(-1)=399.875
21.11=2×8+1 +8^(-1) +8^(-2)=17.140625

P2-4 将下列十进制数转换为二进制数,不用计算器并写出计算过程:

1234=连除法,除2取余=10011010010
88=1011000
124.02=小数部分连乘法,乘2取整,保留八位≈1111100.00000101
14.56≈1110.10001111

P2-5 将下列十进制数转换为八进制数,不用计算器并写出计算过程:

1156=连除法,除8取余=2204
99=143
11.4=小数部分连乘法,乘8取整,保留四位≈13.3146
72.8≈110.6314

P2-6 将下列十进制数转换为十六进制数,不用计算器并写出计算过程:

567=连除法,除16取余=237
1411=583
12.13=小数部分连乘法,乘16取整,保留二位≈C.21
16=10

P2-7 将下列八进制数转换为十六进制数,不用计算器并写出计算过程:

514=101 001 100=0001 0100 1100=14C
411=100 001 001=0001 0000 1001=109
13.7=001 011.111=1011.1110=B.E
1256=001 010 101 110=0010 1010 1110=2AE

P2-8 将下列十六进制数转换为八进制数,不用计算器并写出计算过程:

51A=0101 0001 1010=010 100 011 010=2432
4E1=0100 1110 0001=010 011 100 001=2341
BB.C=整数部分转二进制,小数部分先转十进制再转二进制,保留12位≈1011 1011.0001 1110 1011=010 111 011.000 111 101 011=273.0753
ABC.D≈1010 1011 1100.0011 0110 1111=101 010 111 100.001 101 101 111=5374.1557

P2-9 将下列二进制数转换为八进制数,不用计算器并写出计算过程:

101101=101 101=55
1011000=001 011 000=130
011110.01=011 110.010=36.2
111111.111=111 111.111=77.7

P2-10 将下列二进制数转换为十六进制数,不用计算器并写出计算过程:

101101=0010 1101=2D
1011000=0101 1000=58
011110.01=0001 1110.0100=1E.4
111111.111=0011 1111.1110=3F.E

P2-11 将下列十进制数转换为二进制数,使用例2-17中讨论的另一种方法,并写出计算过程:

121=64+32+16+8+1=2^6 +2^5 +2^4 +2^3 +2^0=1111001
78=64+8+4+2=2^6 +2^3 +2^2 +2^1=1001110
255=128+64+32+16+8+4+2+1=2^7 +2^6 +2^5 +2^4 +2^3 +2^2 +2^1 +2^0=11111111
214=128+64+16+4+2=2^7 +2^6 +2^4 +2^2 +2^1=11010110

P2-12 将下列十进制数转换为二进制数,使用例2-18中讨论的另一种方法,并写出计算过程:

3+5/8=3+4/8+1/8=3 +2^(-1) +2^(-3)=11.101
12+3/32=12+2/32+1/32=12 +2^(-4) +2^(-5)=1101.00011
4+13/64=4+8/64+4/64+1/64=4 +2^(-3) +2^(-4) +2^(-5)=100.00111
12+5/128=12+4/128+1/128=12 +2^(-5) +2^(-7)=1101.0000101

P2-13 在底为 b 的位置化数字系统中,可用 K 个数码表示的最大整数数字是 b^K-1。分别找出以下系统中使用6个数码的最大数字:

二进制:2^6-1=63=111111
十进制:10^6-1=999999
十六进制:16^6-1=16777215=FFFFFF
八进制:8^6-1=262143=777777

P2-14 不进行转换,找出下面各种情况下目标系统中所需的最少数码数量:

5个十进制数码转换为二进制:log_2(10000)≈14
4个十进制数码转换为八进制:log_8(1000)≈4
7个十进制数码转换为十六进制:log_16(1000000)≈5
使用科学计算器的话,有些计算器不支持自由底的对数计算,按键的log其实是默认”以10为底取对数“,也就是数学课上学过的”lg“,这时就要用上换底公式:
log_a(b)=lgb/lga。
比如log_8(1000)=lg(1000)/lg(8),这样就能用计算器算了。
另,结果是向上取整的。

P2-15 不进行转换,找出下面各种情况下目标系统中所需的最少数码数量:

5位二进制数码转换为十进制:lg(2^(5-1))≈2
3个八进制数码转换为十进制:lg(8^(3-1))≈2
3个十六进制数码转换为十进制:lg(16^(3-1))≈3
题目不许转换,但是可以私下转换看看来总结规律。
5位二进制转换为十进制,数码量最小的值必然是10000。
转换十进制时,其实有效值只有最高位上的”1“,也就是1×2^(5-1)=16。
计算数码量相当于数16有几位数,就是计算以10为底,16的对数,即lg(16),然后向上取整。
其余同理。
进一步总结公式。
对于任意以b为底的数码系统,K位b数码转换为十进制的最少数码量,公式为:lg(1×b^(K-1))
化简为:lg(b^(K-1)),结果向上取整。

P2-16 下表显示如何重写小数,使其分母是2的幂次(1,2,4,8,16等等)。

原来的写法-新的写法:
0.5-1/2
0.25-1/4
0.125-1/8
0.0625-1/16
0.03125-1/32
0.015625-1/64
但是,我们有时需要组合它们以得到合适的小数。例如,0.625是0.5+0.125。这就意味0.625可以写成1/2+1/8或5/8。
将下列十进制小数改写为带2的幂次的小数:
0.1875=0.125+0.0625=1/8+1/16
0.640625=0.5+0.125+0.015625=1/2+1/8+1/64
0.40625=0.25+0.125+0.03125=1/4+1/8+1/32
0.375=0.25+0.125=1/4+1/8

P2-17 使用前面的解题方法,把下列数转换为二进制数:

7.1875=111.0011
12.640625=1100.101001
11.40625=1011.01101
0.375=0.011

P2-18 找出下列情形的整数最大值:

b =10,K=10:999999999
b=2,K=12:111111111111
b=8,K=8:77777777
b=16,K=7:FFFFFFF

P2-19 找出用于存储下列整数所需的最小位数:

小于1000:lg(1000)/lg(2)≈10
小于100000,lg(100000)/lg(2)≈17
小于64,lg(64)/lg(2)≈6
小于256,lg(256)/lg(2)≈8
和P2-14的思路一样。这里明确提到了”存储“,我就理解为二进制的”位模式“了。

P2-20 一个小于b^K的数可以用以b为底的K个数码表示。求下列情况下需要的数码数量:

小于2^14的二进制整数:log_2(2 ^14)=14
小于10^8的十进制数:lg(10 ^8)=8
小于8^13的八进制整数:log_8(8 ^13)=13
小于16^4的十六进制数:log_16(16 ^4)=4

P2-21 一个用于因特网的公共底是b=256。我们使用256个符号来表示该系统中的数字。设计者使用十进制数字0到255来表示其中一个符号,而不是创建大量的新符号。也就是说,符号集是S={0,1,2,3,…,255}。该系统中的数字总是以S_1.S_2.S_3.S_4这种4个符号间隔3个点的形式出现。该系统用于定义因特网的网址(参见第6章)。例如,该系统中的一个地址是10.200.14.72,等价于十进制中的10×256^3 +200×256^2 +14×256^1 +72×256^0=180883016。这个数字0系统称为点十进制计数法。写出下列因特网地址的十进制数值:

17.234.34.14=17×256^3 +234×256^2 +34×256^1 +14×256^0=300556814
14.56.234.56=251718200
110.14.56.78=1846425678
24.56.13.11=406326539
交给计算器吧……

P2-22 前面问题中因特网地址也可以表示为位模式。这种情况下,用32位表示一个地址。在点十进制计数法中的一个符号用8位。例如,地址10.200.14.72也可表示为00001010 11001000 00001110 01001000。用位表示下列因特网地址:

17.234.34.14=00010001 11101010 00100010 00001110
14.56.234.56=00001110 00111000 11101010 00111000
110.14.56.78=01101110 00001110 00111000 01001110
24.56.13.11=00011000 00111000 00001101 00001011
交给进制转换器吧……

P2-23 写出下列马数字的等值十进制数:

XV=15
XXV II=27
XL III=43
MCLV II=1157

P2-24 把下列十进制数转换成罗马数字:

17=X VII
38=XXL VIII
82=LXXX II
999=CM XC IX

P2-25 找出下列有错的罗马数字:

MMIM:I不能写在M前面
MIC :I不能写在C前面
CVC:V不能写在C前面
VX:直接写V就行了

P2-26 玛雅文明发明了位置化的二十进制(以20为底)数字系统,称为玛雅数字系统。他们用20为底,可能是因为他们使用手指和脚趾一起来计数。该系统使用的20个符号建立在3个更简单的符号之上。该系统的先进特征在于它有符号0,这是一个外壳。另外2个符号是一个圈(或一个鹅卵石)表示1,以及一个横杆(或一个棍子)表示5。为了表示大于19的数字,数字竖写。在因特网上搜索以下问题的答案:十进制数12、123、452和1256在玛雅数字系统中是什么?

{5+5+2}
{(5+1)×20}+{3}
{20×20}+{2×20}+{5+5+2}
{20×20}+{20×20}+{20×20}+{2×20}+{5+5+5+1}
大括号表示一个数码。
电脑上不好画,意会即可。百度百科就有画法。

P2-27 巴比伦文明发明了首个位置化数字系统,称为巴比伦数字系统。他们继承了闪族人和阿卡得人的数字系统,将其发展为位置化的六十进制(以60为底)数字系统。该底现今还用于时间和角度。例如,1小时为60分钟,1分钟为60秒。同样,1度为60分,1分为60秒。底为b的位置化系统需要b个符号(数码),我们希望一个位置化的六十进制系统有60种符号。但是巴比伦人没有符号0,而且通过堆叠表示1和10的2个符号构造出其他59个符号。在因特网上搜索以下问题的答案:用巴比伦数字表示十进制数:11291,3646,3582。指出没有符号0可能出现的问题。巴比伦数字系统是如何解决这个问题的?

{03,08,11},即3×60^2 +8×60^1 +11×60^0
{01,00,46},即1×60^2 +0×60^1 +46×60^0
{59,42},即59×60^1 +42×60^0
第一个问题同样意会。具体画法网上一搜一大把。
第二个问题我是在维克多·J.卡茨的《数学史通论》中读到过,翻出来答案是:如果某一位是0,那么就空格。
但有时0在数字末尾往往会导致混淆,比如分不清{03,42}(即3×60+42),还是{03,42,00}(3×60^2 +42×60),这时,机智的巴比伦人就会在数字后面加注释符号,比如注释“60”,那么就是{03,42},注释“3600”,那就是{03,42,00}。
至于这些注释符号,又是另一个系统了,书上说他们对于“1,10,60,100,600,1000,3600”各有独立的符号。