第12章 编码与数制
学习要点
- 二进制数、八进制数、十六进制数的概念及它们与十进制数相互转换的方法。
- 如何使用Python中的数制转换函数。
对标内容
能够进行二进制、八进制、十六进制与十进制之间的相互转换;
理解Python中的数制转换函数。
情境导入
二进制在中国古代就有应用。二进制的运用,在我国古代就已显现得淋漓尽致。中国古代的二进制运用与现代电子计算机中二进制的运用是一致的。首先从《易经》 上可以看到二进制的起源。《易经》阐述的是世间万象变化,通过卦爻来说明天地之间、日月系统以内、人生与事物变化的法则。《易经》中的卦是用阳爻(一)、 阴爻(--)表示的,可看作用二进制手段实现的。中国古代将二进制运用于天地、 人事、哲学研究,而现代的信息系统领域将二进制运用于电子数字化研究。
十进制与二进制
知识点详解
人们通常把用来表示信息的符号组合称为信息代码,而编制代码的过程称为信息编码。
在计算机中,所有的信息都是采用二进制数存储的,计算机存储的最小单位是位,每一个二进制位可以表示0和1两种信息。
二进制数的特点是:有0、1两个基本数码,采用逢二进一的进位规则。
将十进制数转化为二进制数的方法:除以2取余,逆序输出。
例如:(143)~10~=(10001111)~2~
除以2取余数,直到商为0,将所得余数倒排序。
将二进制数转化为十进制数的方法:按权展开,逐项相加。
例如:(1011)~2~=1 x 2^3^+0 x 2^2^+1 x 2^1^+1 x 2^0^=(11)~10~
n个二进制位最多能表示的不同信息个数是2^n^; n位的二进制数能表示的最大十进制数是2^n^-1。
Python中的转换函数:bin()函数将十进制整数转换为二进制数字符串,要求参数必须为整数;int()函数将二进制数字符串转换为十进制数。
例如:
>>> bin(11)
'0b1011' # 0b开头的数字代码串,表示一个二进制数
>>> int("0b1011",2)
11
>>> int("1011",2)
11 #也可以省略0b,与上一行代码等价
易错点
- bin()函数将十进制整数转换为二进制数,返回的结果是0b开头的字符串。
- 二进制数的前缀"0b”可以省略,同时“0b”与“0B”等价,不区分大小写,八进制数、十六进制数的表示同理。
模拟考题
考题1 单选题
将十进制数120转换为二进制数时,该二进制数的位数是()。
A. 5 B. 6 C. 7 D. 8
答案:C
解析:将120除2取余,逆向输出,得到的答案是1111000
考题2 判断题
二进制数10101010对应的十进制数为169。()
答案:错误
解析:按权展开,得到的答案是170。
十进制与八进制
知识点详解
八进制数的特点是:有0、1、2、3、4、5、6、7共8个基本数码,采用逢八进一的进位规则。
将十进制数转化为八进制数的方法:除以8取余,逆序输出。
例如:(143)~10~ = (217)~8~
除以8取余数,直到商为0,将所得余数倒排序。
将八进制数转化为十进制数的方法:按权展开,逐项相加。
例如:(217)~8~ = 2 x 8^2^+1x 8^1^+7 x 8^0^=(143)~10~
Python中的转换函数:oct()函数将十进制整数转换为八进制数字符串,要求参数必须为整数;int()函数将八进制数字符串转换为十进制数。
>>> oct(143)
'0o217'
>>> int('0o217',8)
143
>>> int("127",8) #0o可以省略,与上一行代码等价
87
易错点
- oct()函数将十进制整数转换为八进制数字,返回的结果是0o开头的字符串。
- 八进制数的前缀“0o”可以省略,“0o”与“0O”等价,不区分大小写。
模拟考题
考题1 单选题
表达式 int('11',8) 的值是()。
A. 10 B. 11 C. 12 D. 9
答案:D
解析:按权展开,逐项相加:(11)~8~ = 1x8^1^ + 1x8^0^ = (9)~10~。
考题2 判断题
八进制数68对应的十进制数为56。()
答案:错误
解析:八进制数没有“8”这个基数,所以答案是错误。
十进制与十六进制
知识点详解
十六进制数的特点是:有0、1、2、3、4、5、6、7、8、9、A、B、C、D、 E、F共16个基本数码,采用逢十六进一的进位规则。
将十进制数转化为十六进制数的方法:除以16取余,逆序输出。
例如:(143)~10~ = (8F)~16~
除以16取余数,直到商为0,将所得余数倒排序。
将十六进制数转化为十进制数的方法:按权展开,逐项相加。
例如:(8F)~16~ = 8 X 16^1^ + 15 x 16^0^ = (143)~10~
Python中的转换函数:hex()函数将十进制整数转换为十六进制数字符串,要求参数必须为整数;int()函数将十六进制数字符串转换为十进制数。
例如:
>>> hex(143)
'0x8f'
>>> int("0x8f",16)
143
>>> int("8f",16) #0x可以省略,x不区分大小写,基数f也不区分大小写,与上一行代码等价
143
易错点
- hex()函数将十进制整数转换为十六进制数,返回的结果是0x开头的字符串。
- 十六进制数的前缀“0x”可以省略,“0x"与"0X”等价。
模拟考题
考题1 单选题
将十进制数30转换为十六进制数,最低位上的数是()。
A. c B. d C. e D. f
答案:C
解析:将30除以16取余,余数为十进制14,转为十六进制是e或E,所以答案是C。
考题2 判断题
将十进制数转换成十六进制数后,它的位数一定会变短。()
答案:错误
解析:10以内的十进制数转为十六进制数,位数不变,所以答案是错误。
二进制与十六进制
知识点详解
将二进制整数转化为十六进制数的方法:从低位开始4位1组,逐组转换(如果位数不够,左边补0凑足)。
例如:(101110111110111)~2~ = (5DF7)~16~
二进制数 0101 1101 1111 0111
十六进制数 5 D F 7
将十六进制数转化为二进制数的方法:逐位分解,1位数转为4位二进制数(如果最左边有0,省略不写)。
例如:(5DF7)~16~ = (101110111110111)~2~
十六进制数 5 D F 7
二进制数 0101 1101 1111 0111
合并4组4位二进制数,把最左边的0省略不写,得到101110111110111。
Python中的转换函数:hex()函数将二进制整数转换为十六进制数字符串, 要求参数必须为整数;bin()函数将十六进制数转换为二进制数。
例如:
>>> hex(0b101110111110111)
'0x5df7'
>>> bin(0x5df7)
'0b101110111110111'
易错点
- hex()函数将二进制整数转换为十六进制数,二进制数不必加引号。
- bin()函数将十六进制数转换为二进制数,十六进制数不必加引号。
模拟考题
考题1 单选题
下列关于表达式的计算结果,不正确的是()。
A. hex(int('11',2))的结果是'0x3'
B. hex(0b11110111)的结果是'0xf7'
C. hex(int('11',16))的结果是'0x17'
D. bin(0xf7)的结果是'0b11110111'
答案:C
解析:C选项正确的结果应该是'0x11'。
考题2 判断题
二进制数11110011转化为十六进制数为F3。( )
答案:正确
解析:二进制整数转化为十六进制数,从低位开始4位1组,逐组转换。
编码与数制单元测试题
模拟考题
一、单选题(共15题,每题4分,共60分)
1、通过算式1×2³+1×2²+0×21+1×20可将二进制1101 转为十进制,下列进制转换结果正确的是?( )
A. 0b10转为十进制,结果是2
B. 0d10转为十进制,结果是8
C. 0x10转为十进制,结果是10
D. 0o10转为十进制,结果是16
2、在Python语言中,关于bin(0x11)的功能,下列说法正确的是?( )
A. 将十进制数11转换为二进制
B. 将十六进制数11转换为二进制
C. 将二进制数11转换为十进制
D. 将十六进制数11转换为十进制
3、关于hex()函数,描述不正确的是?( )
A. hex()函数可以将十进制整数转换成十六进制数
B. hex()函数的参数可以一个十进制整数
C. hex()函数的返回值是一个十六进制数
D. hex()函数的返回值是一个字符串
4、下列关于表达式的计算结果,不正确的是?( )
A. hex(0x37) 的结果是'0x37'
B. hex(0o67) 的结果是'0x37'
C. hex(0b1011) 的结果是'0xb'
D. hex(int('11',16))的结果是'0x17’
5、关于十六进制数,下列说法错误的是?( )
A. 十六进制数从小数点向左数第一位代表有几个1。
B. 十进制数的基数个数为16,所以里面包括0—9,A—F,这十六个数码。
C. 相同的十进制数分别转换成十六进制数和二进制数后,二进制数的数位通常比十六进制数长。
D. 十进制数转换成十六进制数后,它的位数一定会变短。
6、int函数可以将字符串转换为数值,关于int函数的使用,正确的是?( )
A. int("0b10000",10)
B. int("16",10)
C. int("0o020",10)
D. int("0x10",10)
7、小明在学习编程时,学习到了一个二进制数101,这个二进制数对应的十进制数的数值是?(
A. 2
B. 3
C. 4
D. 5
8、下列代码的输出结果是?( )
x = 0x10
print(x)
A. 2
B. 8
C. 10
D. 16
9、要表示10种不同的信息,需要的二进制位数至少为?( )
A. 2
B. 3
C. 4
D. 5
10、八进制10与十六进制10相加,其对应的十进制数是?( )
A. 20
B. 26
C. 24
D. 18
11、下面不同数制数据中,数值最大的是?( )
A. 0x2B
B. 0o37
C. 41
D. 0b100111
12、与十进制数 1770 对应的八进制数是?( )
A. 3350
B. 3351
C. 3352
D. 3540
13、Python中十六进制与十进制进行转换时,下列表述错误的是?( )
A. 十进制数57转换成十六进制,可以表示成int('57',16)
B. 十进制数57转换成十六进制,可以表示成hex(57)
C. 十六进制数39转换成十进制,可以表示成int('39',16)
D. 十六进制数39转换成十进制,可以表示成int('0x39',16)
14、八进制10的十进制值是?( )
A. 8
B. 10
C. 20
D. 24
15、下列十六进制数中,转换为二进制数后含有偶数个“1”的是?( )
A. 0xF8
B. 0xE0
C. 0xA9
D. 0x15
二、判断题(共10题,每题4分,共20分)
16、二进制数11110011转化为十六进制数为F3。
正确 错误
17、hex函数可以将十进制数转换成十六进制数。在Python交互式编程环境下,执行语句hex(2020)后,显示的运行结果是'7e4'。
正确 错误
18、将十六进制数0x7e4转换成十进制数,可以使用int('0x7e4',16)语句,而不能使用int('7e4',16)语句。
正确 错误
19、十六进制数转换为二进制数较简单,只需要将每一位十六进制数转换为四位二进制数,即可。
正确 错误
20、int('0x25',16)语句和int('25',16)语句都能实现将十六进制数0x25转换成十进制数的功能。
正确 错误
21、二进制数 1010111转换为十六进制数是 A7。
正确 错误
22、十六进制与八进制数值之间的转换,常常借助二进制或者十进制作为中间的桥梁。
正确 错误
23、同一个整数分别用十六进制和八进制表示后,数值一定不相等。
正确 错误
24、二进制数转换为十六进制的方法是:从右到左将4位分成一段,左边不满4位的可以用0补满,分别转换为十六进制
正确 错误
25、二进制数与十六进制数的末位是“1”,各转换为十进制数后都是奇数。
正确 错误
答案
一、单选题
1、A 2、B 3、C 4、D 5、D 6、B 7、D
8、D
试题解析:0x10的结果为16,故选D
9、C
试题解析:n位二进制可以表示2的n次方种信息,故至少要4位。
10、C
试题解析:将对应的八进制和十六进制转换为十进制相加。
11、A
12、C
试题解析:反向取余法 3352
13、A
14、A
试题解析:八进制10的十进制值是为8,故选A
15、C
试题解析:将十六进制转换二进制,对1的个数进行统计。
二、判断题
16、正确 17、错误
18、错误
试题解析:int()函数用来进行数制转换,以上两种用法都可以。
19、正确
20、正确
试题解析:int('0x25',16)语句和int('25',16)语句都可以实现转换。
21、错误
试题解析:二进制数 1010111转换为十六进制数是57。
22、正确 23、错误
24、正确
试题解析:四位二进制表示一位十六进制
25、正确
试题解析:二进制、八进制、十六进制末位数决定该数奇偶