1.3.2 各种数制的转换
将数由一种数制转换成另一种数制称为数制间的转换。由于计算机采用二进制,但用计算机解决实际问题时对数值的输入/输出通常使用十进制,这就是一个十进制向二进制转换或由二进制向十进制转换的过程。也就是说,在使用计算机进行数据处理时,首先必须把输入的十进制数转换成计算机所能接受的二进制数;计算机在运行结束后,再把二进制数转换成人们所习惯的十进制数输出。这两个转换过程完全由计算机系统自动完成。有时候,为了方便,人们常用八进制或十六进制作为中间结果进行数制转换。下面介绍各种数制之间如何完成转换。
1.二进制数转换为十进制数
二进制数转换为十进制数的方法就是将二进制数的每一位数按权系数展开,然后相加。即将二进制数按式(1-1)展开,然后进行相加,所得结果就是等值的十进制数。
【例1-3】 把二进制数1011.01转换为十进制数。
(1011.01)2=1×23+0×22+1×21+1×20+0×2-1+1×2-2
=8+0+2+1+0+0.25
=(11.25)10
2.十进制数转换为二进制数
将十进制数转换为二进制数是进制转换间比较复杂的一种,也是与其他进制转换的基础。这里把整数和小数转换分开讨论。
(1)整数的转换
十进制整数转换为二进制整数的方法为除基取余法,即将被转换的十进制数用2连续整除,直至最后的余数为0或1,然后将每次所得到的商按相除过程反向排列,结果就是对应的二进制数。
【例1-4】 将十进制数356转换为二进制数。
将356用2进行连续整除:
所以,(356)10=(101100100)2。
(2)小数的转换
十进制小数转换为二进制小数的方法为乘基取整法,即将十进制数连续乘2得到进位,按先后顺序排列进位就得到转换后的小数。
【例1-5】 将十进制小数0.625转换为相应的二进制数。
余数为0,转换结束。所以,(0.625)10=(0.101)2。
3.二进制数与八进制数的转换
(1)二进制数转换为八进制数
因为二进制数和八进制数之间的关系正好是23=8,所以二进制数与八进制数之间的转换只要按位展开就可以了。
【例1-6】 将二进制数101100111.011001转换为八进制数。
以小数点为界,分别将3位二进制对应1位八进制如下:
所以,(101100111.011001)2=(547.31)8。
注意:从小数点开始,往左为整数,最高位不足3位的,可以在前面补零;往右为小数,最低位不足3位的,必须在最低位后面补0。
(2)八进制数转换为二进制数
先将需要转换的八进制数从小数点开始,分别向左和向右按每1位八进制对应3位二进制展开即得到对应的二进制数。
【例1-7】 将八进制数674.531转换为二进制数。
(674.531)8=(110111100.101011001)2
转换后的二进制最高位和最低位无效的0可以省略。
4.二进制数和十六进制数之间的转换
(1)二进制数转换为十六进制数
转换方法与前面所介绍的二进制数转换为八进制数类似,唯一的区别是4位二进制对应1位十六进制,而且十六进制除了0~9这10个数符外,还用A~F表示它另外的6个数符。
【例1-8】 将二进制数110110101000.0111111转换为十六进制数。
从小数点开始,往左为整数,最高位不足4位的,可以在前面补零;往右为小数,最低位不足4位的,必须在最低位后面补0。所以,(110110101000.0111111)2=(0DA8.7E)16。
注意:在给出十六进制数的前面加上“0”是因为这个十六进制数的最高位为字符D,用0作为前缀以示与字母区别。
(2)十六进制数转换为二进制数
先将需要转换的十六进制数从小数点开始,分别向左和向右按每1位十六进制对应4位二进制展开即得到对应的二进制数。
【例1-9】 将十六进制数5DF.6A转换为二进制数。
(5DF.6A)16=(010111011111.01101010)2
转换后的二进制最高位和最低位无效的0可以省略。
5.十进制数与八进制数、十六进制数之间的相互转换
表1-3列出了常用进制之间的转换。只要按式(1-1)所给出的表达关系,就可以用数学方法证明并得到相应的转换方法。通常,十进制和八进制及十六进制之间的转换不需要直接进行,可用二进制作为中间量进行相互转换。如要将一个十进制数转换为相应的十六进制数,可以先将十进制数转换为二进制数,然后直接根据二进制数写出对应的十六进制数,反之亦然。
表1-3 十进制、二进制、八进制、十六进制转换表
续表