大学计算机基础(Windows 10+Office 2016)(微课版)
上QQ阅读APP看书,第一时间看更新

1.4.4 不同数制之间的相互转换

下面将具体介绍4种常用数制之间的转换方法。

1.非十进制数转换为十进制数

将二进制数、八进制数和十六进制数转换为十进制数时,只需用该数制的各位数乘以各自位权数,然后将乘积相加,用按权展开的方法即可得到对应的结果。

【例1-1】将二进制数10110转换成十进制数。

先将二进制数10110按位权展开,再将乘积相加,转换过程如下所示。

(10110)2=(1×24+0×23+1×22+1×21+0×2010=(16+4+2)10=(22)10

【例1-2】将八进制数232转换成十进制数。

先将八进制数232按位权展开,再将乘积相加,转换过程如下所示。

(232)8=(2×82+3×81+2×8010=(128+24+2)10=(154)10

【例1-3】将十六进制数232转换成十进制数。

先将十六进制数232按位权展开,再将乘积相加,转换过程如下所示。

(232)16=(2×162+3×161+2×16010=(512+48+2)10=(562)10

2.十进制数转换成其他进制数

将十进制数转换成二进制数、八进制数和十六进制数时,可先将数字分成整数和小数分别转换,再拼接起来。

例如,将十进制数转换成二进制数时,整数部分采用“除2取余倒读”法,即将该十进制数除以2,得到一个商和余数(K0),再将商除以2,又得到一个新的商和余数(K1),如此反复,直到商是0时得到余数(Kn-1),然后将得到的各次余数,以最后余数为最高位、最初余数为最低依次排列,即Kn-1K1 K0,这就是该十进制数对应的二进制数的整数部分。

小数部分采用“乘2取整正读”法,即将十进制的小数乘2,取乘积中的整数部分作为相应二进制小数点后最高位K-1,取乘积中的小数部分反复乘2,逐次得到K-2K-3Km,直到乘积的小数部分为0或位数达到所需的精确度要求为止,然后把每次乘积所得的整数部分由上而下(即从小数点自左往右)依次排列起来(K-1K-2K-m),即为所求的二进制数的小数部分。

同理,将十进制数转换成八进制数时,整数部分除8取余,小数部分乘8取整;将十进制数转换成十六进制数时,整数部分除16取余,小数部分乘16取整。

【例1-4】将十进制数225.625转换成二进制数。

用除2取余法进行整数部分转换,再用乘2取整法进行小数部分转换,具体转换过程如图1-7所示。

图1-7 十进制数转二进制数的过程

(225.625)10=(11100001.101)2

注意

在进行小数部分的转换时,有些十进制小数不能转换为有限位的二进制小数,此时只能用近似值表示。例如,(0.57)10不能用有限位二进制数表示,如果要求5位小数近似值,则得到(0.57)10≈(0.10010)2

3.二进制数转换成八进制、十六进制数

二进制数转换成八进制数所采用的转换原则是“3位分一组”,即以小数点为界,整数部分从右向左每3位为一组,若最后一组不足3位,则在最高位前面添0补足3位;小数部分从左向右每3位分为一组,最后一组不足3位时,尾部用0补足3位,然后将每组中的二进制数按权相加得到对应的八进制数。

【例1-5】将二进制数1101001.101转换为八进制数,转换过程如下所示。

二进制数 001 101 001 . 101

八进制数 1 5 1 . 5

得到的结果:(1101001.101)2 = (151.5)8

二进制数转换成十六进制数所采用的转换原则与上面的类似,为“4位分一组”,即以小数点为界,整数部分从右向左、小数部分从左向右每4位一组,不足4位用0补齐即可。

【例1-6】将二进制数101110011000111011转换为十六进制数,转换过程如下所示。

二进制数 0010 1110 0110 0011 1011

十六进制数 2 E 6 3 B

得到的结果:(101110011000111011)2 = (2E63B)16

4.八进制、十六进制数转换成二进制数

八进制数转换成二进制数的转换原则是“一分为三”,即从八进制数的低位开始,将每一位上的八进制数写成对应的3位二进制数即可。如有小数部分,则从小数点开始,分别向左右两边按上述方法进行转换即可。

【例1-7】将八进制数162.4转换为二进制数,转换过程如下所示。

八进制数 1 6 2 . 4

二进制数 001 110 010 . 100

得到的结果:(162.4)8 = (1110010.1)2

十六进制数转换成二进制数的转换原则是“一分为四”,即把每一位上的十六进制数写成对应的4位二进制数即可。

【例1-8】将十六进制数3B7D转换为二进制数,转换过程如下所示。

十六进制数 3 B 7 D

二进制数 0011 1011 0111 1101

得到的结果:(3B7D)16 = (11101101111101)2