1.4 基础知识:进位制及其相互转换
1.4.1 二进制、十进制与r进制
进位计数制是一种用数码和数位(权)表示数值型信息的方法。一个数由一定数目的数码排列在一起组成,每个数码的位置规定了该数码所具有的数值等级——“权”,该位置也称为“数位”,可区分数码的个数称为“基值”。该计数制又称为以基值为进位的计数制,数位的“权”值是基值的幂,计数中,某一数位累计到基值后,向高数位进一;高数位的一,相当于低数位的基值大小。日常生活中,常见进位计数制有十进制(自然数)、十二进制(月)、二十四进制(昼夜)、六十进制(小时/分钟/秒)等。在计算机中,还有二进制、八进制和十六进制等。一般地,以后缀B表示二进制数,后缀O表示八进制数,后缀H表示十六进制数,后缀D表示十进制数,或者以(数码串)r表示一个r进制数,如图1.5所示。
图1.5 r进制与十进制、二进制的概念比较示意
基值为r的r进制数值N的表示方法为:
N=(dn-1dn-2…d2d1d0.d-1d-2…d-m)r。
该数表示的十进制大小为:
式中:m、n为正整数,n为整数的位数,m为小数的位数,di为r个数码0,1,…,r-1中的任意一个,r为基值,ri为数位的权值,小数点位于d0r0的后面。
1. 十进制
当r=10时,表示十进制数。在十进制数中,10个数码为0,1,…,9。逢十进一,其数位权值为10i。
示例14 (245.25)十=2×102+4×101+5×100+2×10-1+5×10-2。
2. 二进制
当r=2时,表示二进制数。在二进制数中,2个数码为0或1。逢二进一,其数位权值为2i。
示例15 (11110101.01)二=1×27+1×26+1×25+1×24+0×23+1×22+0×21+1×20+0×2-1+1×2-2=(245.25)十。
3. 八进制和十六进制
当r=8时,表示八进制数。在八进制数中,8个数码为0,1,…,7。逢八进一,其数位权值为8i。当r=16时,表示十六进制数。在十六进制数中,分别用A表示(10)十,用B表示(11)十,用C表示(12)十,用D表示(13)十,用E表示(14)十,用F表示(15)十。所以,16个数码为0,1,2,…,8,9,A,B,C,D,E,F。逢十六进一,其数位权值为16i。
示例16 (365.2)八=3×82+6×81+5×80+2×8-1=(245.25)十;
(F5.4)十六=F×161+5×160+4×16-1=(245.25)十。
1.4.2 进位制之间的相互转换
1. 其他进制转换到十进制
表1.1给出了4种进位制之间转换的对应关系。
表1.1 十进制数、二进制数、八进制数和十六进制数对照表
一个用任意进制表示的数,都可用上述式1转换成十进制数。为便于计算,可采用如下方法:整数部分和小数部分分别按下述方法转换。
整数部分采用基值重复相乘法:按括号及优先级次序,计算从最高位开始,乘基值加次高位,结果再乘基值加次次高位,一直加到个位d0为止。
示例17 11110101 B=_____D。
解:
小数部分采用基值重复相除法:按括号及优先级次序,计算从最低位开始,除基值加高位,结果再除基值,一直加到小数点为止,最后再除基值。
示例18 0.F62B H=_____D。
解:N=0.F62B H=(((B÷16+2)÷16+6)÷16 +F)÷16=0.96159 D。
2. 十进制转换到其他进制
整数部分和小数部分分别转换:整数部分采用基值重复相除法,即除基值取余数方法,一直除到商等于0时为止,将所得的余数从下到上排列起来即为所要求的进位制数(参见示例19)。小数部分采用基值重复相乘法,即乘基值取整数方法(参见示例20)。十进制小数转换成二进制小数时,有时永远无法使乘积变成0,在满足一定精度的情况下,可以取若干位数作为其近似值。
示例19 215 D=_____B。
解:如图1.6(a)所示,不断除以基值2,直到商等于0时为止。将所得余数从下到上排列起来为11010111,便是该十进制数转换成二进制整数的结果,即215 D=11010111 B。
示例20 0.6875 D=_____B。
解:如图1.6(b)所示,小数部分不断乘以基值2,将得到的各位整数从上到下排列起来为0.1011,便是该十进制小数转换成二进制小数的结果,即0.6875 D=0.1011 B。
图1.6 十进制转换成二进制的转换过程示意图
3. 二进制、八进制、十六进制转换
由于二进制权值2i、八进制权值8i=23i、十六进制权值16i=24i具有整指数倍数关系,即1位八进制数相当于3位二进制数,1位十六进制数相当于4位二进制数,故可按如下方法转换。
(1)二进制整数转换成八进制/十六进制整数的方法是:先将二进制整数从右向左每隔3位/4位分一组,再将每组按二进制数向十进制数转换的方法进行转换。
(2)二进制小数转换成八进制/十六进制小数的方法是:先将二进制小数从左向右每隔3位/4位分一组,最后一组若不足3位/4位,在该组后面补相应数量的0,凑成3位/4位,再将每组按二进制数向十进制数转换的方法进行转换。
示例21 10110101 B=265 O=B5 H。
解:第1步,将10110101按3位分组为10 110 101,按4位分组为1011 0101。
第2步,分别将每组转换成八进制数、十六进制数。
示例22 0.1011 B=0.54 O=0.B0 H。
解:第1步,将0.1011按3位分组为0.101 100,按4位分组为0.1011 0000。
第2步,分别将每组转换成八进制数。
分别将每一位八进制数转换成3位二进制数,每一位十六进制数转换成4位二进制数便可实现八进制数、十六进制数到二进制数之间的转换。