第12章 编码与数制

学习要点

  1. 二进制数、八进制数、十六进制数的概念及它们与十进制数相互转换的方法。
  2. 如何使用Python中的数制转换函数。

对标内容

能够进行二进制、八进制、十六进制与十进制之间的相互转换;

理解Python中的数制转换函数。

情境导入

二进制在中国古代就有应用。二进制的运用,在我国古代就已显现得淋漓尽致。中国古代的二进制运用与现代电子计算机中二进制的运用是一致的。首先从《易经》 上可以看到二进制的起源。《易经》阐述的是世间万象变化,通过卦爻来说明天地之间、日月系统以内、人生与事物变化的法则。《易经》中的卦是用阳爻(一)、 阴爻(--)表示的,可看作用二进制手段实现的。中国古代将二进制运用于天地、 人事、哲学研究,而现代的信息系统领域将二进制运用于电子数字化研究。

十进制与二进制

知识点详解

人们通常把用来表示信息的符号组合称为信息代码,而编制代码的过程称为信息编码。

在计算机中,所有的信息都是采用二进制数存储的,计算机存储的最小单位是位,每一个二进制位可以表示0和1两种信息。

二进制数的特点是:有0、1两个基本数码,采用逢二进一的进位规则。

将十进制数转化为二进制数的方法:除以2取余,逆序输出。

例如:(143)~10~=(10001111)~2~

除以2取余数,直到商为0,将所得余数倒排序。

image-20220519095112672

将二进制数转化为十进制数的方法:按权展开,逐项相加。

例如:(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,与上一行代码等价

易错点

  1. bin()函数将十进制整数转换为二进制数,返回的结果是0b开头的字符串
  2. 二进制数的前缀"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

易错点

  1. oct()函数将十进制整数转换为八进制数字,返回的结果是0o开头的字符串
  2. 八进制数的前缀“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

易错点

  1. hex()函数将十进制整数转换为十六进制数,返回的结果是0x开头的字符串
  2. 十六进制数的前缀“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'

易错点

  1. hex()函数将二进制整数转换为十六进制数,二进制数不必加引号。
  2. 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、正确

试题解析:二进制、八进制、十六进制末位数决定该数奇偶

Copyright © all right reserved,powered by Gitbook该文件修订时间: 2023-09-02 11:48:01