1.3.2 不同数制之间的转换

1.十进制数与二进制数之间的转换

用计算机处理十进制数,必须先把它转化成二进制数才能被计算机所接受。计算结果应将二进制数转换成人们习惯的十进制数。

(1)十进制数转换为二进制数

当将一个十进制数转换为二进制数时,通常是将其整数部分和小数部分分别进行转换。

①十进制整数转换为二进制整数

由于二进制计数的原则是“逢二进一”,因此,将十进制整数转换为二进制整数时采用除以2取余法。其具体做法是:将十进制数除以2,得到商和余数;再将这个商除以2,又得到商和余数;继续这个过程,直到商等于零为止。此时,每次所得的余数(必定是0或1)就是对应二进制数中的各位数字。但必须注意,在这个过程中,第一次得到的余数为对应二进制数的最低位,最后一次得到的余数为对应二进制数的最高位,将每次取得的余数部分从下到上逆序排列即得到所对应的二进制整数。

②十进制小数转换为二进制小数

在将十进制小数转换为二进制小数时采用乘2取整法。其具体做法是:用2乘十进制纯小数,取出乘积的整数部分;再用2乘余下的纯小数部分,再取出乘积的整数部分;继续这个过程,直到余下的纯小数为0,或者已得到足够的位数为止。最后将每次取得的整数部分从上到下顺序排列即得到所对应的二进制小数。

③一般的十进制数转换为二进制数

对于一般的十进制数转换为二进制数,可以将其整数部分与小数部分分别转换,然后再把它们组合起来。

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

整数部分采用除2取余法,小数部分采用乘2取整法:

整数部分的结果为:(57)10=(111001)2

小数部分的结果为:(0.84375)10=(0.11011)2

最后结果为:(57.84375)10=(111001.11011)2。

(2)二进制数转换成十进制数

把二进制数转换为十进制数的方法是:将二进制数按权展开后求和。

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

(10111001.101)2=1×27+0×26+1×25+1×24+1×23+0×22+0×21+1×20+1×2-1+0×2-2+1×2-3

=128+0+32+16+8+0+0+1+0.5+0+0.125

=(185.625)10

注意:一个二进制小数能够完全准确地转换成十进制小数,但是,一个十进制小数不一定能够完全准确地转换成二进制小数。

2.十进制数与八进制数、十六进制数之间的转换

(1)十进制数转换成八进制数、十六进制数

了解了十进制数转换成二进制数的方法以后,对十进制转换成八进制数或十六进制数就很容易了。十进制数转换成非十进制数的方法是:整数部分和小数部分分别进行转换,整数部分采用“除以基数取余法”,小数部分采用“乘基数取整法”。对于八进制数,整数部分采用除以8取余法,小数部分采用乘8取整法;对于十六进制数,整数部分采用除以16取余法,小数部分采用乘16取整法。

【例1-3】将十进制数263.6875转换为八进制数。

整数部分采用除8取余法,小数部分采用乘8取整法:

整数部分的结果为:(263)10=(407)8

小数部分的结果为:(0.6875)10=(0.54)8

最后结果为:(263.6875)10=(407.54)8

【例1-4】将十进制数986.84375转换为十六进制数。

整数部分采用除16取余法,小数部分采用乘16取整法:

整数部分的结果为:(986)10=(3DA)16

小数部分的结果为:(0.84375)10=(0.D8)16

最后结果为:(986.84375)10=(3DA.D8)16

(2)八进制数、十六进制数转换成十进制数

非十进制数转换成十进制数的方法是:把各个非十进制数按权展开后求和。对于八进制数或十六进制数可以写成8或16的各次幂之和的形式,然后再计算其结果。

【例1-5】将八进制数366.54转换为十进制数。

(366.54)8=3×82+6×81+6×80+5×8-1+4×8-2

=192+48+6+0.625+0.0625

=(246.6875)10

【例1-6】将十六进制数A1C.D8转换为十进制数。

(A1C.D8)16=A×162+1×161+C×160+D×16-1+8×16-2

=10×162+1×161+12×160+13×16-1+8×16-2

=2560+16+12+0.8125+0.03125

=(2588.84375)10

3.二进制数、八进制数、十六进制数之间的转换

前面我们介绍了计算机的常用计数制,以及它们与十进制之间的转换。在计算机的常用计数制中,二进制与八进制之间的相互转换以及二进制与十六进制之间的相互转换都是很方便的。

(1)二进制与八进制之间的相互转换

由于二进制数和八进制数之间存在特殊关系,81=23,因此,一位八进制数正好相当于三位二进制数。

①二进制数转换成八进制数

把二进制数转换成八进制数的方法是:以小数点为界,整数部分从低位到高位将二进制数的每三位分为一组,若不够三位时,在高位左面添0;小数部分从小数点开始,自左向右每三位一组,若不够三位时,在低位右面添0,补足三位,然后将每三位二进制数用一位八进制数替换即可完成。

【例1-7】将二进制数11110101.11001转换为八进制数。

即(11110101.11001)2=(365.62)8

②八进制数转换成二进制数

将八进制数转换成二进制数的方法为:以小数点为界,向左或向右每一位八进制数用相应的三位二进制数取代,然后去掉整数部分中最左边的“0”以及小数部分最右边的“0”。

【例1-8】将八进制数17.236转换为二进制数。

即(17.236)8=(001111.010011110)2=(1111.01001111)2

(2)二进制数与十六进制数之间的转换

由于16是2的四次方,即161=24,因此,一位十六进制数正好相当于四位二进制数。

①二进制数转换成十六进制数

把二进制数转换成十六进制数的方法是:以小数点为界,整数部分从低位到高位将二进制数的每四位分为一组,若不够四位时,在高位左面添0;小数部分从小数点开始,自左向右每四位一组,若不够四位时,在低位右面添0,补足四位,然后将每四位二进制数用一位十六进制数替换即可完成。

【例1-9】将二进制数1101010111.110110101转换为十六进制数。

即(1101010111.110110101)2=(357.DA8)16

②十六进制数转换成二进制数

将十六进制数转换成二进制数的方法为:以小数点为界,向左或向右每一位十六进制数用相应的四位二进制数取代,然后去掉整数部分中最左边的“0”以及小数部分最右边的“0”。

【例1-10】将十六进制数4CB.D8转换为二进制数。

即(4CB.D8)16=(010011001011.11011000)2=(10011001011.11011)2

十进制数可以直接转换为任何进制数,其他进制数也可以方便地转换为十进制数,其他不同进制数之间可以十进制数为桥梁进行转换。