1.4.4 进制之间的转换

二进位制在计算机内部使用是再自然不过的。但在人机交流上,二进位制有致命的弱点——数字的书写特别冗长。例如,十进位制的100000写成二进位制成为11000011010100000。为了解决这个问题,在计算机的理论和应用中还使用两种辅助的进位制——八进位制和十六进位制。二进位制的三个数位正好记为八进位制的一个数位,这样,数字长度就只有二进位制的1/3,与十进位制记的数长度相差不多。例如,十进位制的100000写成八进位制就是303240。十六进位制的一个数位可以代表二进位制的四个数位,这样,一个字节正好是十六进位制的两个数位。十六进位制要求使用十六个不同的符号,除了0~9十个符号外,常用A、B、C、D、E、F六个符号分别代表(十进位制的)10、11、12、13、14、15。这样,十进位制的100000写成十六进位制就是186A0。

二进位制和八进位制、二进位制和十六进位制之间的换算都十分简便,而采用八进位制和十六进位制又避免了数字冗长带来的不便,所以八进位制、十六进位制已成为人机交流中常用的记数法。

1.十进制转换为二进制

十进制数转换成二进制数的方法是:整数部分采用除2取余法,即反复除以2直到商为0,取余数;小数部分采用乘2取整法,即反复乘以2取整数,直到小数为0或取到足够二进制位数。

例如,将十进制数25.625转换成二进制数,其过程如下。

①先转换整数部分。

转换结果为:(25)10=(11001)2

②再转换小数部分。

转换结果为:(0.625)10=(0.101)2

③最后结果:(25.625)10=(11001.101)2

如果一个十进制小数不能完全准确地转换成二进制小数,可以根据精度要求转换到小数点后某一位停止。例如,0.36取四位二进制小数为0.0101。

2.二进制转换为十进制

二进制数转换成十进制数的方法是:按权相加法,把每一位二进制数所在的权值相加,得到对应的十进制数。各位上的权值是基数2的若干次幂。例如:

(1101.11)2=1×23+1×22+0×21+1×20+1×2-1+1×2-2=(13.75)10

3.二进制与八进制、十六进制的相互转换

每一位八进制数对应三位二进制数,每一位十六进制数对应四位二进制数,这样大大缩短了二进制数的位数。

(1)二进制数转换成八进制数的方法

以小数点为基准,整数部分从右至左,每3位一组,最高位不足3位时,前面补0;小数部分从左至右,每3位一组,不足3位时,后面补0,每组对应一位八进制数。

例如,二进制数(01011.01)2转换成八进制数为

001 011.010

1  3  2

即(01011.01)2=(13.2)8

(2)八进制数转换成二进制数的方法

把每位八进制数写成对应的三位二进制数。

例如,八进制数(47.3)8转换成二进制数为

4  7 .  3

↓  ↓  ↓

100 111  011

即(47.3)8=(100111.011)2

同理,二进制数(10101.11)2转换成十六进制数为

0001  0101  .  1100

1   5     C

即(10101.11)2=(15.C)16

(3)十六进制数转换成二进制数的方法

把每位十六进制数写成对应的四位二进制数。

例如,十六进制数(4F.8)16转换成二进制数为

4   F  .  8

↓   ↓   ↓

0100  1111  1000

即(4F.8)16=(1001111.1)2

4.八、十六进制与十进制的相互转换

八进制、十六进制数转换成十进制数也是采用“按权相加”法。例如:

(25.14)8=2×81+5×80+1×8-1+4×8-2=(21.1875)10

(AB.6)16=10×161+11×160+6×16-1=(171.375)10

十进制整数转换成八进制、十六进制数采用除8、16取余法。十进制数小数转换成八进制、十六进制小数采用乘8、16取整法。