1.2.2 数制之间的相互转换
1.R进制数转换为十进制数
这里的R进制通常表示二进制、八进制、十六进制。
R进制数转换为十进制数的方法很简单,将R进制数按位权展开求和即可得到相应的十进制数。
例1:将(101011.01)2、(325.6)8、(6D.A)16转换为十进制数。
2.十进制数转换为R进制数
转换规则分成整数和小数两个部分。
整数部分采用“除R取余”法。即用十进制数连续地除以R,记下每次所得的余数,直至商为0。将所得余数按从下到上的顺序依次排列起来即为转换结果。
例2:将十进制数(125)10转换成二进制数、八进制数和十六进制数。
这里,余数13用十六进制的D来表示。
所以,(125)10=(1111101)2=(175)8=(7D)16。
小数部分采用“乘R取整”法。即用十进制小数乘以R,得到一个乘积,将乘积的整数部分取出来,将乘积的小数部分再乘以R,重复以上过程,直至乘积的小数部分为0 或满足转换精度要求为止。将每次取得的整数按从上到下的顺序依次排列起来即为转换结果。
例3:将十进制小数(0.8125)10转换成二进制小数。
所以,(0.8125)10=(0.1101)2。
在本例中,小数部分正好能够精确转换,没有误差。但要注意的是,并非所有的十进制小数都能完全精确地转换成对应的二进制小数,(0.1)10就是一个例子。当乘积的小数部分无法乘到全为0时,可根据题目要求取其近似值,保留适当的小数位数。
十进制小数转换成八进制小数或十六进制小数的方法与十进制数转换成二进制数方法相似,仅需把乘数换成8或16即可。
对于既有整数部分又有小数部分的十进制数转换成R进制数,转换规则是:将该十进制数的整数部分和小数部分分别进行转换,然后将两个转换结果拼接起来即可。
例4:将(125.8125)10转换成二进制数。
因为:(125)10=(1111101)2
(0.8125)10=(0.1101)2
所以:(125.8125)10=(1111101.1101)2
3.二进制数与八进制数、十六进制数之间的转换
由于二进制数与八进制数、十六进制数的特殊关系(8和16都是2的整数次幂:8=23,16=24),所以由二进制转换成八进制、十六进制,或者进行反向的转换,都非常简单。
(1)二进制数与八进制数的相互转换
转换规则分成整数和小数两个部分。
把二进制数的整数部分转换成八进制数的方法是,从二进制数的小数点开始从右向左,将每三位数字分成一组(最后一组若不足三位,可不补“0”),把每组数换成对应的八进制数码即得到转换结果。
例5:将二进制整数10101111001转换成八进制数。
分组:10 101 111 001 (整数分组,不足三位,可不补0)
对应值:2 5 7 1 (每组对应一位八进制数)
结果:(10101111001)2=(2571)8
把二进制小数转换成八进制数的方法与整数转换相同,只是应注意以下两点:
① 分组方向是小数点开始从左向右;
② 分组时末尾若不足三位,必须在右边加0补足三位,否则会出错。
例6:把二进制数11100101.1101转换成八进制数。
分组: 11 100 101.110 100
对应值:3 4 5. 6 4 (小数分组,不足三位,必须补0)
所以,(11100101.1101)2=(345.64)8。
本例中,小数部分分组时,最末一组只有一位,应补两个0,成为“100”,若不补0,将得到错误结果:(11100101.1101)2=(345.61)8。
八进制数转换成二进制数的方法与上述转换过程相反。转换时,将每一位八进制数展开为对应的三位二进制数字串,然后把这些数字串依次拼接起来即得到转换结果。
例7:把八进制数532.07转换成二进制数的过程如下:
5 3 2. 0 7
101 011010.000111
所以,(532.07)8=(101011010.000111)2。
例8:把八进制21.34转换成二进制数的过程如下:
2 1 .3 4
010 001.011100
将转换结果中的前导0及小数部分尾部的0去掉,所以,(21.34)8=(10001.0111)2。
(2)二进制数与十六进制数的相互转换
二进制数与十六进制数的相互转换方法和上述二进制数与八进制数间的转换相同,只是在转换时,用四位二进制数与一位十六进制数互换,具体过程不再赘述,下面给出一些转换实例。
例9:()2=(D5B)16
(.1010)2=(4F.A)16
(ABC)16=()2
(E64.5A)16=()2
注意
每一位八进制数可用三位二进制数表示,每一位十六进制数可用四位二进制数表示,这是以上三种数制相互转换的要点,所以应该熟记表1-1中所列的基本对应关系。