进制换算在工作中是一项必不可少的技能,例如在RTC中得到的数据为十六进制的,但是我们使用时用的是十进制。这就免不了进行进制之间的换算。进制之间的换算可以手动计算进行换算,也可以编写程序进行换算。这里主要选提一下手动换算。掌握了手动换算,也就掌握了进制换算的灵魂,之后再编写程序进行换算自然不在话下。
我们都知道,多少进制就是逢多少进一。例如我们最熟悉的十进制就是逢十进一,当我们数到9,这时下一个数是10,这里我们把个位清零,向高位进一。那么十六进制就是逢十六进一,八进制就是逢八进一,二进制就是逢二进一。
话不多说直接上例子。
例1:将20转换为二进制,十六进制,八进制。
解:先看十进制转换为二进制。将要转换的十进制数放在被除数位置,要转换成的二进制放在除数位置(除数位置的值取要转换成几进制就是几,这里是转换成二进制,所以除数位置为2)。然后依次做除法,把每一次运算的余数写在每一次运算商的后面,如果除尽,就写零。这样一直到不能再进行除法为止。然后,按照余数得出的顺序逆序写出,结果就是要转换的结果。见下图,余数得出的顺序为00101(即从上至下),然后将余数逆序写出,即10100。这样就得出了十进制20转换为二进制的结果10100。
我们来对结果进行一下验证,我们知道上面得出的二进制的结果即为1*+0*+1*+0*+0*=16+0+4+0+0=20。显然这个二进制的转换结果是正确的。
再看十进制转换为十六进制。同样按照上面的方法,被除数20保持不变,除数变为16(因为这次是要转换为十六进制),随后进行除法运算。结果如图。将余数逆序写出,得十进制20转换十六进制结果为14。
我们再来对结果进行一下验证,我们知道上面得出的十六进制的结果即为1*+4*=16+4=20。显然这个十六进制的转换结果同样是正确的。
最后看十进制转换为八进制。依旧按照上面的方法,被除数20保持不变,除数变更为8(因为这次是要转换为八进制),随后进行除法运算。结果如图。将余数逆序写出,得十进制20转换八进制结果为24。
我们还是对结果进行一下验证,我们知道上面得出的八进制的结果即为2*+4*=16+4=20。显然这个十六进制的转换结果同样是正确的。
到这里,进制换算的方法相信大家也有一个大致的概念了。这里再总结一下:
1.将被除数位置写上要被转换的十进制数
2.将除数位置写上要转换成的进制数的数值(转换为16进制就写16,转换为八进制就写8,转换为二进制就写2)
3.进行除法计算,将余数依次写在每一次运算商的后面(如果除尽就写0)
4.将商逆序排列写出,即得转换之后的进制值
注意:这个算法只适用于十进制转换为各进制,不适用于各进制之间的转换。也就是被除数一定是十进制数。
后记:不知道大家在学习进制转换的时候有没有想过一个问题,就是为什么要把余数逆序写出,为什么越晚出现的余数位数越高?
这个问题困扰了我挺长时间,上学的时候只知道这么算,不知道为什么。上周的某一天晚上我突然想明白了,这里抛出一解释,供大家参考。
我以上面的20转换为二进制为例。可以看出,每一次的除数不变,那么一直进行除法就说明一直可以被2除,越后面出来的余数其除数位置2的幂次越高,所以自然也就越靠近高位。