在计算机和其它数字系统中,最常使用得是二进制数,而人们日常习惯于使用十进制数,所以,在数据处理过程中首先必须把十进制数转换成计算机能加工和处理的二进制数,经计算机加工处理后,再将二进制数的计算结果转换成人们习惯的十进制数。这里就存在一个不同数制的相互转换问题。
1. 2. 1 二进制数和十进制数之间的转换
二进制数转换成等值的十进制数称之为二-十转换。转换时只需将二进制数写成按权展开式,并将展开式中各乘积项的积算出来,然后各项相加,即可得到与该二进制数等值的十进制数。例如
(1001.11 )2= 1×23+0×22+0×21+1×20+1×2-1+1×2-2
= (9.75 )10
将十进制数转换成等值的二进制数称之为十-二转换。转换时时,需要将待转换的十进制数分成整数部分和小数部分,并分别加以转换成二进制数,然后再将两部分加起来。
第一步先讨论整数部分的转换。假如有十进制数(S)10,其等值的二进制数为(anan-1…a0.a-1a-2…a-m )2,若将二进制数按权展开,则有
(S )10= an2n+an-12n-1+…+a121+a020
= 2 (an2n-1+an-12n-2+…a1 )+a0 (1.2.1)
从上式表明,若将(S )10除以2,则得到的商为an2n-1+an-12n-2+…a1,余数则为a0。若再将得到的商依次除以2,所得的余数分别是a1、a2、…、an-1、an。
所以,当需要将一个十进制整数转换成二进制数时,十进制数的整数部分采用“除2取余”法进行转换,即把十进制整数除以2,取出余数1或0作为相应二进制数的最低位,把得到的商再除以2,再取余数1或0作为二进制数的次低位,依次类推,继续上述过程,直至商为0,最后所得余数为最高位。
例如,要将十进制整数157转换为二进制整数,就要把它写成如下形式:
第二步讨论小数部分的转换。
若(S )10是一个十进制小数,对应的二进制小数为(0.a-1a-2a…a-m )2,则有
(S )10= a-12-1+a-22-2+…+a-m2-m (1.2.2)
将上式两边同乘以2得到
2 (S )10= a-1+ (a-22-1+a-32-2+…+a-m2-m+1 )
从结果可以看出,将小数(S )10乘以2所得乘积的整数部份即a-1。
同理,将乘积的小数部分再乘以2又可得
2 (a-22-1+a-32-2+…+a-m2-m+1 )= a-2+ (a-32-1+…+a-m2-m+2 )
即可得乘积的整数部份a-2。
以此类推,将每次乘2后所得的乘积的小数部分再乘以2后,便可求出二进制小数的每一位。
例1.2.1将(0.8125 )10化为二进制小数
解:
所以(0.8125 )10= (0.1101 )2
1.2. 2 八进制数、十六进制数与二进制数的转换
八进制数的基数是8 (8=23 ),十六进制数的基数为16 (16=24 )。由于二进制数、八进制数和十六进制数之间具有2的整指数倍的关系,因而可十分方便地直接进行转换。
将二进制整数转换成八进制或十六进制整数的方法是:从右边第一位起,分别向左按3位(转换成八进制)或4位(转换成十六进制) 分组,最后不满3位或4位的,则需加0。将每组以对应的八进制数或十六进制数代替,即为等值的八进制数和十六进制数。例如
则 (10011101 )2 = (010,011,101 )2= (235 )8
= (1001,1101 )2 = (9C )16
将八进制数或十六进制数转换成二进制数时,可按上述方法的为相反过程进行,即将每一位八进制数或十六进制数分别转换成3(或4)位二进制数,在按高位到低位组合起来。