第1章 计算机科学基础
1.1 数制及其转换
1.1.1 考试大纲
二进制、十进制和十六进制等常用数制及其相互转换
1.1.2 试题统计
1.1.3 典型例题
【例1-1】 (2005年5月上午试题57)8个二进制位至多可表示___个数据。
(57)A.8 B.64 C.255 D.256
· 【解析】
这一类型的题目考查的知识点是计算机的数制。
在计算机内部,数是以二进制的形式表示的,之所以采用二进制,是因为二进制有0、1两个数字,正好与电路的状态吻合,且实现电路简单,工作可靠,简化运算,逻辑性强。
在计算机中,经常用到的是十进制,二进制,八进制,十六进制。对于不同的数制,它们的共同特点是:
(1)每一种数制都有固定的符号集。例如二进制数制的基本符号集有0和1两个。
(2)每一种数制都使用位置表示法。即处于不同位置的尾符所代表的值不同,与它所在位置的权值有关。
各种进制数之间的关系如表1-2所示。
表1-2 各种进制数之间的关系
十进制
二进制
八进制
十六进制
十进制
二进制
八进制
十六进制
0
0
0
0
2
10
2
2
1
01
1
1
3
11
3
3
续表
十进制
二进制
八进制
十六进制
十进制
二进制
八进制
十六进制
4
100
4
4
12
1100
14
C
5
101
5
5
13
1101
15
D
6
110
6
6
14
1110
16
E
7
111
7
7
15
1111
17
F
8
1000
10
8
16
10000
20
10
9
1001
11
9
17
10001
21
11
10
1010
12
A
18
10010
22
12
11
1011
13
B
·
解答此类题目的一般思路是对常用进制的表示范围要熟悉,这是计算机的基础。但有时题目不是直接考核该知识点,而是将此知识点融合到其他知识点中综合应用。
针对这道题目,求8个二进制位表示的数据个数应为28 =
256,但要注意如果题目改为求8个二进制位表示的最大的无符号数据则为28 – 1 =
255,所以答案应该是D。
【例1-2】 与二进制100101.001101等值的十进制数是(1)
,等值的十六进制数是(2) 。
(1)A.25.203125 B.25.34 C.37.203125 D.37.34
(2)A.25.203125 B.25.34 C.25.31 D.91.0D
【解析】
这一类型的题目考查的知识点是数制间的转换。
十进制数转换为非十进制数的方法是:
整数部分:除2取余、除8取余、除16取余
小数部分:乘2取整、乘8取整、乘16取整
非十进制数转换为十进制数的方法是:按权展开求和。
非十进制数转换为非十进制数的方法是:1位八进制数由3位二进制数组成;1位十六进制数由4位二进制数组成。
解答此类题目的一般思路是熟练掌握各种进制之间的转换方法。但要注意在十进制数转换为非十进制数时,对整数部分是除以基数的余数按逆序排列,最后得到的余数是最高有效位;对小数部分是乘以基数的整数按正序排列,最先得到的整数是最高有效位。
针对这道题目,第(1)问属于非十进制数转换为十进制数,按权展开求和。
第(2)问属于二进制数转换为十六进制数,根据两者之间的关系以小数点为界分别向左、右每4位二进制数为一组,最高位和最低位不足4位的用0补齐,将每组二进制数所对应的十六进制数写出。
所以答案应该是(1)C,(2)B。
【例1-3】 与十六进制数AC.E等值的十进制数是(1)
,等值的八进制数是(2) 。
1010 1100.1110
(1)A.112.875 B.162.875 C.172.7 D.172.875
(2)A.254.16 B.254.7 C.530.07 D.530.7
【解析】
这一类型的题目考查的知识点是数制间的转换。
解答此类题目的一般思路是熟练掌握各种进制之间的转换方法。但要注意将十六进制数转换成十进制数的方法是按权展开求和,即每位数字乘以相应的位权再累加起来,其中十六进制A~F应写成十进制数10~15。
针对这道题目,将十六进制数AC.E转换成十进制数为:
将十六进制数转换为八进制数的方法是先将十六进制数转换为二进制数,再将二进制数以小数点为准,左右每3位一组转换为相应的八进制数,不足3位用0补齐。则:
所以答案应该是(1)D,(2)B。
【例1-4】 下列无符号数中,最大数是( )
。
A.205 B.001001010010BCD C.0CDH D.11100011B
【解析】
这一类型的题目考查的知识点是数制间的转换。
解答此类题目的一般思路是熟练掌握各种进制之间的转换方法,为了比较不同进制表示的数的大小,最好变成同一进制的数据。
针对这道题目,若均变为十进制数,则B为252,C为205,D为227,所以答案应该是B。
【例1-5】 多项式214 + 211 + 24
+ 21 +
20表示为十六进制数为(1),表示为十进制数为(2)。
(1)A.4813H B.8026H C.2410H D.EB410H
(2)A.18
448 B.9
232 C.18
451 D.36 902
【解析】
这一类型的题目考查的知识点是数制间的转换。
解答此类题目的一般思路是将给出的多项式表达成二进制的形式,然后再将二进制数转换成十六进制数的形式。至于将多项式表示为对应的十进制数形式,既可以采用将给出的多项式直接求和,也可采用十六进制数转换为十进制数的方法。
针对这道题目,多项式214+211+24+21+20表示为二进制数为100100000010011B,则对应的十六进制数为4813H,对应的十进制数为18
451,所以答案应该是(1)A,(2)C。
1.1.4 本节小结
本节主要要求考生掌握计算机的数制表示及它们之间的转换关系,掌握并灵活运用二、十进制数的转换关系,特别是十进制数转换为二进制数的“除2取余,乘2取整”的方法。对于本节内容在考核上,有的内容比较直接和简单,如n位某数制表示的个数与范围,但更多的是将本节的知识点融合在其他的知识点当中考核,以体现几个知识点的综合运用。经常遇到的情况是:在一些有关二进制计算的题目中,题中给出的是十进制数或者是十六进制数,这时往往需要先把它们转换成二进制数才能进行相关的运算。因此本节的知识点是一种基本的技能,必不可少。
1.1.5 全真模拟训练
1.对于R进制数,在每一位上的数字可以有(
)种。
A.R/2 B.R–1 C.R D.R+1
2.十六进制数1000转换成十进制数是(
) 。
A.4096 B.1024 C.2048 D.8192
3.(2004年11月上午试题8)假设用12个二进制位表示数据,它能表示的最大无符号整数为(8)
。
(8)A.2047 B.2048 C.4095 D.4096
4.与十进制数28.625等值的十六进制数为(
) 。
A.112.10 B.1C.A C.1C.5 D.112.5
5.与二进制数11101.010等值的十进制数为(
) 。
A.31.25 B.29.75 C.29.5 D.29.25
6.与十六进制数23.4等值的十进制数为(
) 。
A.35.5 B.23.4 C.35.75 D.35.25
7.(2003年上午试题47)与十进制数254等值的二进制数是(47) 。
(47)A.11111110 B.11101111 C.11111011 D.11101110
8.十进制数125.24对应的二进制数是(
) 。
A.111101.1100 B.1111101.0011 C.1111101.11
D.1111001.0011
9.二、十、十六进制数之间整数转换正确的是(
) 。
A.十进制数200转换为二进制无符号数是11111000B
B.十进制数122转换成十六进制数是7AH
C.十进制数439转换成8421BCD码是010000011001
D.十六进制数F2H转换成十进制数是234
10.下列各数中最大的数是(
) 。
A.11000110.0101B B.D3.51H
C.210.56 D.328.86Q
参考答案
1.C 2.A 3.(8)C 4.B 5.D
6.D 7.(47)A 8.B 9.B 10.D
1.2 数据的表示
1.2.1 考试大纲
· 数的表示(原码、反码、补码表示,整数和实数的机内表示方法,精度和溢出)
· 非数值表示(字符和汉字的机内表示、声音和图像的机内表示)
· 校验方法和校验码(奇偶校验码、海明校验码)
1.2.2 试题统计
表1-3 本节试题统计
试 题
分 值
考查的知识点
2004年5月上午试题45
1
机内数据的原码表示
2004年5月上午试题46
1
机内数据的补码表示
2004年5月上午试题59
1
数据的校验方法
2004年11月上午试题5
1
机内数据的表示形式
2004年11月上午试题6
1
机内数据的表示形式
2004年11月上午试题7
1
补码对应的真值
2004年11月上午试题9
1
原码数据表示的范围
2004年11月上午试题10
1
数据的奇偶校验码
2004年11月上午试题60
1
ASCII码
2005年5月上午试题7
1
机内数据编码0的表示
2005年5月上午试题8
1
机内数据的表示形式
2005年5月上午试题9
1
机内数据的表示形式
1.2.3 典型例题
【例1-6】 (2005年5月上午试题7)在(7)表示中,数值0是惟一表示的。
(7)A.原码 B.反码 C.补码 D.原码或反码
【解析】
这一类型的题目考查的知识点是机内数据编码0的表示。
书写的真值包括数值部分及其符号(+/–),真值在计算机中的表示称为机器数,机器数的表示方法有原码、反码、补码、移码。要注意正、负数的区别,正数的原码、反码、补码完全相同,其符号位为0,其余位取值不变。对于负数,负数的原码其符号位为1,其余各位取值不变;负数的反码其符号位为1,其余各位在原码基础上按位取反;负数的补码其符号位为1,其余各位在原码的基础上按位求反,再在末位上加1。
移码是机器数的又一种表示方法,又称增码,多表示浮点数的阶码。移码的符号位,用1表示正号,用0表示负号,其求法是把其补码的符号位直接变反即可。4种编码中数值0的表示不同,以8位编码为例。
(+0)原= 00000000 (– 0)原= 10000000
(+0)反= 00000000 (– 0)反= 11111111
(+0)补= 00000000 (– 0)补= 00000000
(+0)移= 10000000 (– 0)移= 10000000
解答此类题目的一般思路是对机器数的编码要熟悉,特别是原码、反码、补码,要熟练掌握几种编码中0的表示以及几种编码所能表示的数的范围。
针对这道题目,在4种编码0的表示中,原码、反码有+0和–0之分,即0的编码有2个,补码、移码无+0和–0之分,即0的编码只有1个,在供选择的答案中,没有涉及移码,所以答案应该是C。
【例1-7】 (2005年5月上午试题8、9)若用8位机器码表示十进制数–101,则原码表示的形式为(8)
;补码表示的形式为(9) 。
(8)A.11100101 B.10011011 C.11010101 D.11100111
(9)A.11100101 B.10011011 C.11010101 D.11100111
【解析】
这一类型的题目考查的知识点是机内数据的表示形式与计算。
一般可利用定义求某个数的原码、反码、补码,或者从给定的原码、补码等求数的 真值。
解答此类题目的一般思路是:设机器字长为n,对于一个负数X,求其原码的方法为将最高位即符号位置1,数值部分取X绝对值的二进制,若数值长度不足n–1位,则高位补0;求负数X的反码方法为将X的原码的各数值位取反,符号位置1;求负数X的补码的方法为将X的反码的末位加1。但要注意有的数(如–128的补码)只能采用定义求取。
针对这道题目,十进制数101对应的二进制数为1100101B,则十进制数–101的原码表示形式为11100101B,符号位不变,数值位取反末位加1即得补码为10011011,所以答案应该是(8)A,(9)B。
【例1-8】 已知x =
–105/128,若采用8位机器码表示,则[x]原
=(1) ,[x]补
=(2) 。
(1)A.10011010 B.11010101 C.11101001 D.10100111
(2)A.10010111 B.11010101 C.11101010 D.10100111
【解析】
这一类型的题目考查的知识点是小数的原码和补码表示。
在机内数码的表示中,一个小数的表示是这样的:(1)数的最左面是符号位,对于原码、反码或补码,如该小数是正数,则该符号位为0,如该小数是负数,则该符号位为1;(2)其余各位为该小数的数据位,从左起,第2位的权值为1/2,第3位的权值为1/4,以此类推。
解答此类题目的一般思路是:将给定的分式分解成多个分式之和的形式,每个分式的分子为1,分母为2的幂次,这样可以确定其原码表示。而使用补码表示一个小数时,只要将该数除符号位之外求反,然后加1,就可得到该数的补码表示。
针对这道题目,由于x = –105/128 = –(64/128+32/128+8/128+1/128)
= –(1/2+1/4+1/16+ 1/128)。根据上面的分析,
可以确定x的原码为11101001。对原码求反(符号位不变)后值为10010110,加1得到该数的补码为10010111。所以答案应该是(1)C,(2)A。
【例1-9】
一定点数字长n位,且最高位是符号位,小数点位于最低位的后面,则该机器数所能表示的最小值是() 。
A.1–2n–1 B.–2n–1 C.–2n–1–1 D.–2n
【解析】
这一类型的题目考查的知识点是定点数的表示范围。
所谓定点数,就是小数点的位置固定不变的数。小数点的位置通常有两种约定形式:定点整数(纯整数,小数点在最低有效数值位之后)和定点小数(纯小数,小数点在最高有效数值位之前)。
设机器字长为n,各种码制表示下的带符号数的范围如表1-4所示。
表1-4
机器字长为n时表示的带符号数的范围
码 制
定 点 整 数
定 点 小 数
原码
– (2n–1–1)~+(2n–1–1)
– (1–2– (n–1))~+(1–2–(n–1))
反码
– (2n–1–1)~+(2n–1–1)
– (1–2– (n–1))~+(1–2– (n–1))
补码
–2n–1~+(2n–1–1)
–1~+(1–2– (n–1))
移码
–2n–1~+(2n–1–1)
–1~+(1–2– (n–1))
·
解答此类题目的一般思路是首先清楚所给数是定点整数还是定点小数,然后确定对应码制的表示范围,最后得到要求的结果。要注意,由于字长为n位,且最高位为符号位,所以2的幂次是n–1,而不是n,这是容易出错的地方。
针对这道题目,按题意,该定点数是一个带符号的整数。最小值出现在符号为负,各位为全0时,此时该数应用补码表示,所以答案应该是B。
【例1-10】
某计算机中,浮点数的阶码占8位,尾数占40位(字长共48位),阶码用补码表示,尾数用原码表示,当基数为2时,数的表示范围是(
) 。
A.– (1–2–39)×2–128~(1–2–39)×2127 B.– (1–2–40)×2–127~(1–2–40)×2127
C.– (1–2–40)×2–128~(1–2–40)×2127 D.– (1–2–39)×2–256~(1–2–39)×2255
【解析】
这一类型的题目考查的知识点是浮点数的表示范围。
当机器字长为n时,定点数的补码和移码可表示2n–1个数,而其原码和反码只能表示2n–1–1个数(0占用了两个编码)。因为定点数所能表示的数值范围比较小,运算中很容易因结果超出范围而溢出,所以引入了浮点数。浮点数是小数点位置不固定的数,它能表示更大范围的数。
二进制数N的浮点数表示方法为:
N = 2E × F
其中,E称为阶码,F称为尾数。
在浮点数表示法中,阶码通常为带符号的纯整数,尾数为带符号的纯小数。浮点数的一般表示格式为:
阶符
阶码
尾符
尾数
·
一个数的浮点表示不是惟一的。当小数点的位置改变时,阶码也随之相应改变,因此可用多种浮点形式表示同一个数。
浮点数所能表示的数值范围主要由阶码决定,所表示数值的精度由尾数决定。
对浮点数N:当N为最大正数时,F是最大正数,E是最大正数;当N为最小正数时,F是最大正数,E是最小负数;当N为最大负数时,F是最大负数,E是最小负数;当N为最小负数时,F是最小负数,E是最大正数。
解答此类题目的一般思路是首先明确阶码和尾数采用什么编码,然后计算阶码和尾数的表示范围,最后组合得到浮点数的表示范围。一定要注意题目中阶码E和尾数F指定的是什么编码(原码、反码、补码或移码),否则很容易出错。
针对这道题目,阶码用补码表示,尾数用原码表示,这个浮点数的格式为:
47 46 … 40
39 38 … 0
↑ ↑ ↑ ↑
阶符 阶码 尾符 尾数
阶码的表示范围:–128~+127(即10000000~01111111)
尾数表示的范围:– (1–2–39)~(1–2–39)
最小数为:– (1–2–39)×2–128
最大数为:(1–2–39)×2127
这个浮点数的表示范围为– (1–2–39)×2–128~(1–2–39)×2127,所以答案应该是A。
【例1-11】 (2000年上午试题9)计算机中16位浮点数的表示格式为:
0
3
4 15
阶码
尾数(含尾符)
其中阶码4位(含1位符号)为定点整数,尾数12位(含1位符号)为定点小数,设一个数机器码为1110001010000000。
若阶码为移码且尾数为原码,则其十进制真值为(1) ;
若阶码为移码且尾数为反码,则其十进制真值为(2) ;
若阶码为补码且尾数为原码,则其十进制真值为(3) ;
若阶码为补码且尾数为补码,则其十进制真值为(4),将其规格化后的机器码为(5)。
(1)~(4)A.0.078125 B.20 C.1.25 D.20.969375
(5)A.1110001010000000
B.11110101000000
(5)C.1101010100000000 D.11110001010000
【解析】
这一类型的题目考查的知识点是浮点数的表示及其规格化。
为了充分利用尾数来表示更多的有效数字,即提高数据的表示精度,通常采用规格化浮点数。规定浮点数在运算结束将运算结果存到机器中时,必须是规格化的浮点数。规格化浮点数尾数的最高数值位是有效数字,即正尾数0.5≤F<1,负尾数–1
要求规格化以后,其尾数部分是正数时为0.1×××的形式,是负数时,对于原码为1.1×××的形式,对于补码为1.0×××的形式,可以通过尾数小数点的左右移动和阶码的变化实现。
此类题通常给出计算机中的浮点数表示形式,给出机器码,并指出阶码和尾数的编码,求它的十进制真值,或已知十进制真值,求内码表示。只要了解了它的结构和表达形式及转换关系,不管如何考,都可以做到游刃有余。
解答此类题目的一般思路是对给定的机器码按给定的浮点数格式得到阶码和尾数,然后将阶码变为十进制数,最后得到浮点数的十进制真值。判断如果给定的浮点数机器码不是规格化表示,则可将其表示为规格化的机器码。规格化时,先看给定的浮点数机器码的尾数是用什么码表示,然后看看是否已是规格化数,如不是,将尾数小数点移位,但要注意,为保持浮点数的真值不变,阶码一定要相应地调整。另外在解答此类题目时,还要注意题目条件中给出的阶码和尾数是用什么码表示的,否则很容易出错,而得不到正确的结果。
针对这道题目,对所给机器码1110 0010 1000
0000,按所规定的浮点数表示形式,可知阶码为1110(最高位为阶符1),尾数为001010000000(最高位为尾符0)。
(1)若阶码为移码,1110表示为十进制+6,尾数为原码表示+0.0101B,所以浮点数为26×0.0101B=010100B=20。
(2)若阶码为移码,尾数为反码,因为该尾数为正,其原码与反码相同,结果同(1)。
(3)若阶码为补码,1110表示为十进制数–2,尾数为原码,即+0.0101,该浮点数为2–2×0.0101B=0.000101B=0.078125D。
(4)若阶码为补码,且尾数为补码,因该尾数为正数,因此结果同(3)。
(5)将(4)中的浮点数用规格化数形式表示。2–2×0.0101B=2–3×0.101B,阶码–3的补