2.1.3 数制的转换
1.二进制与十六进制、八进制之间的转换
十六进制和八进制之所以被广泛使用,主要在于它们和二进制之间方便的转换关系。每个十六进制的计数符号对应一个4位的二进制数。对于十六进制而言,要做到和二进制相互转换,只需记住十六进制中每个计数符号与二进制的对应关系,如表2-1所示。
表2-1 十六进制数与二进制数之间的转换对应关系
把一个二进制数转换成十六进制数,可从该二进制数最右端开始,每4个二进制位转换成一个十六进制数。若最左端不足4个二进制位,可在左端用“0”补足。以二进制数1011011为例,转换过程如下:
十六进制数转换成二进制数的过程正好相反,只需将每个十六进制数按照表2-1转换成一个4位的二进制数即可。例如,十六进制数5对应二进制数0101, B对应二进制数1011,故十六进制数5B转换为二进制数01011011。
二进制数转换成八进制数同二进制数与十六进制数的转换类似,只不过每3个二进制位对应一个八进制数。表2-2描述了八进制中每个计数单位与二进制数的对应关系。
表2-2 八进制数与二进制数的转换对应关系
仍以二进制数1011011为例,其转换成八进制数的过程如下:
八进制转换成二进制的过程与此相反,只需将每个八进制数按照表2-2转换成一个3位的二进制数即可。例如,八进制数1对应二进制001,3对应二进制数011,所以八进制数133转换成二进制数001011011。
2.二进制与十进制之间的转换
二进制数与十进制数之间的转换比二进制数与十六进制、八进制数之间的转换复杂,因为两者之间并无简单的对应转换关系。
欲把一个二进制数转换为十进制数,通常采用逐位按权值展开并相加的方式。若
bn-1bn-2…b1b0(bi=0或1, i=0,1,2, …, n-1)
是一个由n个二进制位组成的二进制数,则其对应的十进制数为
bn-1×2n-1+bn-2×2n-2+… +b1×21+b0×20
例如,二进制数1011011可按照下式转换成十进制数91:
1 ×26+0 ×25+1 ×24+1 ×23+0 ×22+1 ×21+1 ×20=91
把一个十进制数转换成二进制数,通常采用所谓的除余法,其基本过程为:先把所要转换的十进制数除以2,余数即为二进制数的最低位;然后对商继续除以2,余数为二进制数的次低位;如此继续,直到所得到的商小于2,而此时的商就是二进制数的最高位。图2-1描述了运用除余法把十进制数139转换成二进制数10001011的过程。
图2-1 除余法
3.十六进制、八进制与十进制之间的转换
十六进制、八进制与十进制之间的转换同二进制与十进制之间的转换类似,也可采用逐位按权值展开并相加的方式进行。设hn-1hn-2…h1h0是一个n位十六进制数,on-1on-2…o1o0是一个n位八进制数,则其对应的十进制数可分别应用下面的公式求得:
(hn-1hn-2…h1h0)16=(hn-1×16n-1+hn-2×16n-2+… +h1×161+h0×160)10
(on-1on-2…o1o0)8=(on-1×8n-1+on-2×8n-2+… +o1×81+o0×80)10
把一个十进制数转换成相应的十六进制数或八进制数,也可以采用除余法,只不过在转换过程中使用的除数分别是16和8。