信息学奥林匹克竞赛初赛精讲精练
上QQ阅读APP看书,第一时间看更新

第二节 进制转换

基础知识

十进制整数转二进制数

除二取余法:用2连续除十进制整数,直到商为0,逆序排列余数即可得到该十进制整数的二进制表示。

例如十进制数57转为二进制数:

·57除以2得28余1

·28除以2得14余0

·14除以2得7余0

·7除以2得3余1

·3除以2得1余1

·1除以2得0余1(商为0,结束)

逆序排列余数(从下往上)得到二进制数:111001B。

十进制整数转n进制同理,即除n取余法。

二进制数转十进制数

按位权展开:在数制中,各位数字所表示值的大小不仅与该数字本身的大小有关,还与该数字所在的位置有关,我们称其为数的位权,简称权。

对于形式化的进制表示,我们可以从0开始,对数字的各个数位进行编号,即从个位起向左依次为编号0、1、2、……;对称地,小数点后的数位则是-1、-2、……。如下表为二进制数111001.000B的位权表示:

任意R进制数按权展开,相加即可得到十进制数,如二进制数111001B转为十进制数:

1×25+1×24+1×23+0×22+0×21+1×20=57

其他进制数转十进制数同理,十进制数的位权是以10为底的幂,二进制数的位权是以2为底的幂,十六进制数的位权是以16为底的幂。数位由高向低,以降幂的方式排列。

进制快捷转换

由于2的3次方是8,所以二进制数转为八进制数时,可三个数为一组进行转换,每组内位权编号重新从零开始计算。例如,二进制数111001B转为八进制数:

(111)(001)B=(1×22+1×21+1×20)(0×22+0×21+1×20)O=71O

同理,由于2的4次方是16,二进制数转为十六进制数时,可四个数为一组进行转换(优先满足右侧分组,因为最高位可以补零),如二进制数111001B转为十六进制数:

(11)(1001)B=(1×21+1×20)(1×23+0×22+0×21+1×20)H=39H

其他进制间转换时,若进制存在幂运算关系,则可依此方法进行快捷转换。

十进制小数转二进制数

乘二取整法:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,如此循环,将每步取出的整数部分顺序排列,得到小数的二进制表示。

整数部分用除二取余法得到二进制数,小数部分用乘二取整法得到二进制数。例如,十进制数32.12转为二进制数的步骤如下。

1)整数部分为32,小数部分为0.12。

2)整数部分32除二取余得到二进制数100000。

3)小数部分:

0.12×2=0.24取整数0

0.24×2=0.48取整数0

0.48×2=0.96取整数0

0.96×2=1.92取整数1(取出后,后续运算因数变为1.92-1=0.92)

0.92×2=1.84取整数1

0.84×2=1.68取整数1

(有的小数部分乘二取整可无限运算下去,须按题目精度要求截取足够位数。)

顺序排列取出整数,得到小数部分的二进制数为.000111。

4)结合得到最终二进制小数:100000.000111。

总结:整数部分,除二取余、逆序排列;小数部分,乘二取整、顺序排列。

范例精讲

例1 如果256种颜色用二进制编码来表示,至少需要( )位。

A. 6

B. 7

C. 8

D. 9

【正确答案】 C

|解析|

n位无符号二进制数能够表示的最大正数为全一(n个1),转为十进制数为20+21+…+2n-1

设x=20+21+…+2n-1

等式两边+1得到:x+1=1+20+21+…+2n-1

1可以看作20:x+1=20+20+21+…+2n-1

相同数的加法变为乘法:x+1=2×20+21+…+2n-1

数学幂运算,底数不变指数相加:x+1=21+21+…+2n-1

表现为两个20合在一起变成了21,接下来等号右边可以继续这样合在一起。

最后x+1=2n-1+2n-1=2n,x=2n-1。

回到问题中,要存储256种颜色,数值对应0~255,2n-1≥255,n至少为8。

赛题训练

1.二进制数1011转换成十进制数是( )。

A. 11

B. 10

C. 13

D. 12

2.下列四个不同进制的数中,与其他三项数值上不相等的是( )。

A. (269)16

B. (617)10

C. (1151)8

D. (1001101011)2

3.请选出以下最大的数( )。

A. (550)10

B. (777)8

C. 210

D. (22F)16

4.十进制小数13.375对应的二进制数是( )。

A. 1101.011

B. 1011.011

C. 1101.101

D. 1010.01

5.与二进制小数0.1相等的八进制数是( )。

A. 0.8

B. 0.4

C. 0.2

D. 0.1

6.与二进制小数0.1相等的十六进制数是( )。

A. 0.8

B. 0.4

C. 0.2

D. 0.1

7.下面有四个数据组,每个组各有三个数据,其中第一个数据为八进制数,第二个数据为十进制数,第三个数据为十六进制数。这四个数据组中三个数据相同的是( )。

A. 120 82 50

B. 144 100 68

C. 300 200 C8

D. 1762 1010 3F2