进制转换
进制即进位计数制,是人为定义的带进位的计数方法。 N进制表示每一位置上的数运算时逢N进一位,如二进制是逢二进一,十进制是逢十进一,十六进制是逢十六进一,以此类推。我们日常生活中使用的进制就是十进制,其他常见进制有二进制、八进制、十六进制等。
那么这些进制之间要如何实现转换呢?十进制是我们最常用的进制,我们发现,任意进制都可以轻松实现到十进制的转换,而十进制也可以很容易地转换到其他任意进制。所以以十进制为桥梁,我们可以实现非十进制之间任意转换。
我们将进制转换的范围暂定为二进制到三十六进制,先解决非十进制到十进制的转换问题。我们以二进制为例,掌握了二进制到十进制的转换方法,其他非十进制的转换方法都可以此类推。
二进制数字分为整数和小数,整数的转换公式是:abcd(2)=d×2^0+c×2^1+b×2^2+a×2^3。abcd为一个二进制整数,从后往前,每一位的数字陆续乘以2的0次方、1次方、2次方、3次方,相加得到的数字就是十进制数字。如:1011=1×2^0+1×2^1+0×2^2+1×2^3=12。
小数的转换公式是:0.efg(2)=e×2^(-1)+f×2^(-2)+g×2^(-3)。0.efg为一个二进制小数,从前往后,每一位小数陆续乘以2的-1次方、-2次方和-3次方,相加得到的数字就是十进制数字。那如果是二进制的带小数的整数呢?整数公式和小数公式相加即可。
再说如何实现十进制到其他进制的转换。还是以二进制为例,从十进制到二进制,如果是整数,我们可以采用“除2取余,逆向排列”的方法。即每次将整数部分除以2,余数为该位权上的数,而商继续除以2,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止,最后读数时候,从最后一个余数读起,一直到最前面的一个余数。
如将十进制的43转换为二进制的步骤如下:将商43除以2,商21余数为1;将商21除以2,商10余数为1;将商10除以2,商5余数为0;将商5除以2,商2余数为1;将商2除以2,商1余数为0; 将商1除以2,商0余数为1; 读数从最后的余数向前读,即(43)D=(101011)B。
如果是小数,我们可以采取“乘2取整,顺序排列”的方法。即用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,此时0或1为二进制的最后一位。或者达到所要求的精度为止。然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。
如将十进制的0.625转化为二进制的步骤如下:0.625*2=1.25,取出整数部1;0.25*2=0.5,取出整数部分0;0.5*2=1,取出整数部分1。最后得到的结果为0.101。
类似的,三进制到十进制的整数转换公式为:abcd(3)=d×3^0+c×3^1+b×3^2+a×3^3。小数转换公式为:0.efg(3)=e×3^(-1)+f×3^(-2)+g×3^(-3)。十进制到三进制的整数转换公式为“除3取余,逆向排列”,小数转换方法为“乘3取整,顺序排列”。
由此可以类推四进制、五进制、六进制......三十六进制与十进制之间的任意转换方式。那么如何实现非十进制间的任意转换呢?如何将十七进制转换为二十三进制?所有的公式方法我们都已经掌握了,只要将十七进制数字转换为十进制数字,再将这个十进制数字转换为二十三进制数字即可。