数据表示与计算的主要内容如图1.8所示。
图1.8
数制也称计数制,是用一组固定的符号和统一的规则来表示数值的方法。日常生活中最常用的是十进制,而在计算机中,多采用二进制,有时也采用八进制和十六进制。
进位计数制简称进位制,是按进位方式实现计数的一种规则,其特点是数码的数值大小与它所在的位置有关。每一数位的数值是由该位数码的值乘以处在该位的一个固定常数,这个常数称为位权或权值。例如,在十进制中,个位的位权是10 0 ,十位的位权是10 1 ,百位的位权是10 2 ,以此类推。
● 十进制:是基数为10的数制,它有0~9共10个数码,进位规则是“逢10进1”。
● 二进制:是基数为2的数制,它只有0和1两个数码,进位规则是“逢2进1”。
● 八进制:是基数为8的数制,它有0~7共8个数码,进位规则是“逢8进1”。
● 十六进制:是基数为16的数制,有0~9和A、B、C、D、E、F共16个数码,其中A~F代表的数值依次是10~15,进位规则是“逢16进1”。
为了区分不同的数制,我们可以采用以下两种方式表示。
(1) 字母表示法 :可在数据后面加一个特定的字母来表示它所采用的进制。通常以字母B表示二进制、字母O表示八进制、字母D表示十进制、字母H表示十六进制。例如,11B(二进制)、11O(八进制)、11D(十进制)、11H(十六进制)。
(2) 下标表示法 :在数据的右下角加上相应进制的基数。例如,(11) 2 、(11) 8 、(11) 10 、(11) 16 。
(1) 非十进制数转换十进制数 :将非十进制数按位权展开,求出各位数值之和,就可以得到对应的十进制数。
【示例】 请将二进制数(1011.01) 2 转换成十进制数。
【解答】 按位权展开:(1011.01) 2 = 1 × 2 3 + 0 × 2 2 + 1 × 2 1 + 1 × 2 0 + 0 × 2 - 1 + 1 × 2 - 2 = 8 + 2 + 1 + 0.25 = (11.25) 10 。
(2) 十进制数转换非十进制(R进制)数 :将十进制数的整数部分和小数部分分别转换成R进制数,再把结果合并起来,就可以得到对应的R进制数。其中十进制数的整数部分采用“除基取余法”进行转换,小数部分采用“乘基取整法”进行转换。
● 整数部分的转换——除基(R)取余法:除基取余法是用十进制数除以目的数制的基数R,所得余数作为最低位,把得到的商再除以R,所得余数作为次低位,以此类推,直至商为0时,所得余数作为最高位。
【示例】 请将十进制数(29) 10 转换为二进制数。
【解答】 把(29) 10 转换为二进制数,逐次除以2取余数:
然后,从下往上写出余数,就可以得到(29) 10 = (11101) 2 。
● 小数部分的转换——乘基(R)取整法:乘基取整法是用目的数制的基数R乘以十进制数,对于第一次相乘得到的结果,将整数部分作为最高位,把结果的小数部分再乘以R,所得结果的整数部分作为次高位,以此类推,直至小数部分为0,或者达到要求的精度为止。
【示例】 将十进制数(0.625) 10 转换为二进制数。
【解答】 把(0.625) 10 转换为二进制数,逐次乘以2取整:
然后,依次写出整数,可以得到(0.625) 10 = (0.101) 2 。
注意,若要把十进制数(29.625) 10 转换成二进制数,只需要把上面求出的整数部分和小数部分合并起来,可以得到(29.625) 10 = (11101.101) 2 。
(1) 二进制数和八进制数之间的转换 :由于八进制数的基数8 = 2 3 ,因此3位二进制数可以构成1位八进制数。如果要将二进制数转换成八进制数,只需要将二进制数的整数部分自右向左每3位一组,最后一组不足3位时以0补足;小数部分自左向右每3位一组,最后一组不足3位时以0补齐;再把每组对应的八进制数写出即可。
【示例】 将二进制数(1100110.0101) 2 转换为八进制数。
【解答】 按照上述方法分组:
由此可知,(1100110.0101) 2 = (146.24) 8 。
反之,如果要将八进制数转换成二进制数,只要将每1位八进制数写成3位二进制数,再按顺序排列起来即可。
(2) 二进制数和十六进制数之间的转换 :由于十六进制数的基数16 = 2 4 ,因此4位二进制数可以构成1位十六进制数。如果要将二进制数转换成十六进制数,只需要将二进制数的整数部分自右向左每4位一组,最后一组不足4位时以0补足;小数部分自左向右每4位一组,最后一组不足4位时以0补齐;再把每组对应的十六进制数写出即可。
【示例】 将二进制数(1100110.10101) 2 转换为十六进制数。
【解答】 按照上述方法分组:
由此可知,(1100110.10101) 2 = (66.A8) 16 。
反之,如果要将十六进制数转换成二进制数,只要将每1位十六进制数写成4位二进制数,再按顺序排列起来即可。
(3) 八进制数和十六进制数之间的转换 :八进制数和十六进制数之间的转换以二进制数为桥梁,先转换为二进制数,再将二进制数转换为相应的进制数。
【示例】 将八进制数(57.16) 8 转换为十六进制数。
【解答】 先转换成二进制数:
再转换成十六进制数:
由此可知,(57.16) 8 = (101111.00111) 2 = (2F.38) 16 。
在计算机中,正数和负数的表示方法是:把一个数的最高位作为符号位,用“0”表示“正”,用“1”表示“负”,数值位连同符号位一起作为一个数,称为机器数。带符号位的机器数对应的数值称为机器数的真值。例如,正数X = +1101011,负数Y = −1101011,表示成机器数就是X = 01101011,Y = 11101011。原码、反码和补码是计算机存储具体数字时常用的三种机器数。
原码是符号位加上真值的绝对值,最高位表示符号,其余位表示真值的绝对值。
【示例】 以8位二进制数举例,+1和−1的原码分别如下:
[+1] = [00000001] 原 ,[−1] = [10000001] 原
正数的反码就是原码,负数的反码是在原码的基础上符号位不变,其余各位取反。
【示例】 以8位二进制数举例,+1和−1的反码可用如下过程表示出来:
[+1] = [00000001] 原 = [00000001] 反
[−1] = [10000001] 原 = [11111110] 反
如果一个反码表示的是负数,可以先转换成原码,然后再看它的真值是多少。
正数的补码就是原码,负数的补码是在原码的基础上符号位不变,其余各位取反,最后+1,也就是在反码的基础上+1。
【示例】 以8位二进制数举例,+1和−1的补码可用如下过程表示出来:
[+1] = [00000001] 原 = [00000001] 反 = [00000001] 补
[−1] = [10000001] 原 = [11111110] 反 = [11111111] 补
如果一个补码表示的是负数,可以将其先转换成反码,再转换成原码,然后看它的真值是多少。也可以使用这样的规则进行转换:符号位不变,其他位取反,然后再+1。
【示例】 以8位二进制数举例,补码11110001所表示的真值推导方法如下:
[11110001] 补 = [10001110+1] 原 = [10001111] 原 ,所以[11110001] 补 表示的真值是−15。
1. 【2019年第2题】二进制数11101110010111和01011011101011进行逻辑与运算的结果是( )。
A.01001010001011
B.01001010010011
C.01001010000001
D.01001010000011
【解析】 两个二进制数进行逻辑与运算的规则:依次计算每一个二进制位,如果两个数相同位上的数字都是1,则这一位的结果为1,否则结果为0。本题的运算见表1.4。
表1.4
【答案】 D
2. 【2020年第9题】二进制数1011 转换成十进制数是( )。
A.11
B.10
C.13
D.12
【解析】 将二进制数中的每一位数码与其相对应的位权相乘后再相加:2 3 +2 1 +2 0 = 8+2+1 = 11。
【答案】 A
3. 【2021年第7题】二进制数101.11对应的十进制数是( )。
A.6.5
B.5.5
C.5.75
D.5.25
【解析】 将二进制数中的每一位数码与其相对应的位权相乘后再相加:
1×2 2 + 0×2 1 +1×2 0 +1×2 − 1 +1×2 − 2 = 5.75
【答案】 C
4. 【2022年第13题】八进制数32.1对应的十进制数是( )。
A.24.125
B.24.250
C.26.125
D.26.250
【解析】 将八进制数中的每一位数码与其相对应的位权相乘后再相加:
3×8 1 +2×8 0 + 1×8 − 1 = 26.125
【答案】 C
5. 【2023年第2题】 八进制数12345670 8 和07654321 8 的和为( )。
A.22222221 8
B.21111111 8
C.22111111 8
D.22222211 8
【解析】 八进制数的加法规则是“逢8进1”,注意保持对齐计算。
【答案】 D
6. 【2023 年第 9 题】数101010 2 和166 8 的和为( )。
A.10110000 2
B.236 8
C.158 10
D.A0 16
【解析】 本题考查的是“进制转换”这一知识点。就本题来说,解题过程如下。
(1)将二进制数101010转换为十进制得到42,将八进制数166转换为十进制得到118。
(2)两数相加得到160,转换为十六进制,得到A0 16 。
【答案】 D
7. 【2024年第2题】计算(14 8 -1010 2 )×D 16 -1101 2 的结果,并选择答案的十进制值:( )
A.13
B.14
C.15
D.16
【解析】 本题考查的是“进制转换”这一知识点。就本题来说,原式化成十进制后为(12-10)×13-13,计算后得13。
【答案】 A
1. 以下哪一项是二进制数10010010对应的十进制数?( )
A.73
B.96
C.122
D.146
【解析】 二进制数10010010对应的十进制数为2 7 +2 4 + 2 1 = 146。
【答案】 D
2. 以下哪一项是十进制数109对应的二进制数?( )
A.1100101
B.1100111
C.1101001
D.1101101
【解析】 本题的运算详见表1.5。十进制数109对应的二进制数为1101101。
表1.5
【答案】 D
3. 以下哪一项是八进制数2330对应的十六进制数?( )
A.230
B.3EB
C.4D8
D.4E0
【解析】 八进制数转十六进制数,可以先将八进制数的每一位转换成3个二进制位,再将二进制数的每4位转换成一个十六进制位,即八进制数2 3 3 0 = 二进制数10 011 011 000 = 二进制数100 1101 1000 = 十六进制数4D8。
【答案】 C
4. 整数56的八位补码是( )。
A.01001000
B.01011100
C.00111000
D.11100011
【解析】 因为非负整数的原码=反码=补码,所以56的八位补码是00111000。
【答案】 C
5. 八位补码10100110对应的十进制整数是( )。
A.−11
B.37
C.−37
D.−90
【解析】 该补码符号位为1,可以确定是一个负数。对于负数来说,通过补码(10100110)→反码(10100101)→原码(11011010)的方式,再计算真值的绝对值(1011010) 2 得到其对应的十进制数是90,最后添加上负号就是−90。
【答案】 D