首页 > 代码库 > 数制及其转换

数制及其转换

N 进制

从广义上说,N 进制可说成是任意进制。但现实中0、1等进制是毫无意义的,所以 N clip_image002_thumb1 2,且为正整数。在此引出N进制的目的有两个;第一是借助N进制把十进制与其他进制的转换关系归纳在一起;第二是把进制间的转换关系向任意进制推广。

(1)十进制与 N 进制的相互转换法则

把十进制与二进制的相互转换关系向其他进制推广,可以得出以下结论:

① 二化十,多项式;十化二,整数除2取余,小数乘2取整。

② 三化十,多项式;十化三,整数除3取余,小数乘3取整。

③ 四化十,多项式;十化四,整数除4取余,小数乘4取整。

④ 八化十,多项式;十化八,整数除8取余,小数乘8取整。

……

可以归纳为:

“N 化十,多项式;十化 N,整数除 N 取余,小数乘 N 取整。”

(2)任意进制间的转换法则

任意进制间的转换是指三进制与五进制、六进制与九进制等之间的转换。按照十进制与 N 进制的转换法则,任意进制之间的转换可以以十进制为基准,建立任意进制之间的转换关系,并把这种转换关系称为“ N → 十,十 → N ”。比如,三化五,先将三进制数转化为十进制数,再将十进制数转化为五进制数。

当两种进制的权为整幂倍时,如二进制与八进制、二进制与十六进制等,两种进制之间就可以直接利用“拼与拆”的法则进行转换。

借助 N 进制的概念可以根据需要定义一种进制,也可以把一种进制下的信息转换为另一种进制下的数据,以达到交换方便或信息保密的目的。比如,可以把26个英文字母定义为二十六进制或二十七进制,把十二生肖定义为十二进制或十三进制等。

难点分析

理解二进制、八进制、十六进制或其他任意进制,首先可以从我们最熟悉的十进制入手,分析并掌握十进制的特点,向其他进制推广,建立起二、八、十六及任意进制向十进制转换的方法。然后再从进位记数制共性出发,找出十进制向二、八、十六及任意进制转换的方法。此外,通过对二、八、十六进制的分析,可以得出二进制与八进制、十六进制存在着“亲缘”关系。理解并掌握上述3个问题的分析方法,就会很自然地得出记数制相互转换的若干便于记忆的法则。

法则1 二化十,多项式。即把二进制数(或八进制数、十六进制数及任意进制数)转换成十进制数,可将该数展开成一个多项式,然后再用十进制计算该多项式,即可完成转换。

法则2 十化二,整数除2取余;小数乘2取整。若是十进制整数转换为二进制数,可将该整数逐次用2去除,直到商得零为止,依次排列每次所得到的余数,即为十进制整数所对应的二进制数(将余数由后至前依次排列)。若十进制数是小数,可将该数逐次用2去乘,并依次排列每次相乘所得的整数,即为十进制小数所对应的二进制数(将整数由前至后依次排列为小数)。

值得注意的是,某些十进制小数进行十化二时,出现化不尽的问题,表现为小数部分总不会为0。例如,十进制的0.1、0.6等均化不尽。当出现十化二化不尽时,一般是根据要求取近似值。例如,按给定位取近似值,或者按给定位数,同时采用0舍1入的方法取近似值。

法则3 二化八,三位一拼;八化二,一拆为三。即把二进制数的3位拼成八进制数的一位,而八进制数的一位拆成二进制数的3位。

法则4 儿化十六,四位一拼;十六化二,一拆为四。即把二进制数的4位拼成十六进制数的一位,而十六进制数的一位拆成二进制数的4位。

1)N 进制的定义

N 进制是一种有 0~N-1,共 N 个基数字,逢 N 进一的有权记数制。基数字的任意排列,加上正号、负号、小数点可以构成 N 进制的整数、负数、整数、小数。

显然,当 N = 2 时,为二进制;当 N = 8 时,为八进制;当 N = 10 时,为十进制;当 N = 16 时,为十六进制;当 N = 24 时,为二十四进制,以此类推。

2)N 进制数的多项式表示

clip_image002 为权系数,clip_image002[5] 为权位,N 进制数 clip_image002[7] 可以表示为权系数与位权乘积之和的多项式:

clip_image002[11](m,n均为正整数)

显然,当 N = 2,clip_image002 取值0~1,clip_image002[5] = clip_image002[17] 时,上式则为二进制数的多项式;当 N = 10,clip_image002 的取值为0~9时,clip_image002[5] = clip_image002[23] 时,上式则为十进制数的多项式表示。以此类推,可以得出任意进制数的多项式表示。因此,了解了N进制就了解了任何进制。

3)N 进制数的相互转换

(1)二、八、十六进制的相互转换

十化二也可以借助八进制进行,即先做十化八,再做八化二。十化十六也可以借助二进制进行,即先做十化二,再做儿化十六。总之,在相互转换中可以把二、八、十六进制看成是同一进制的3种不同表现形式对十进制进行转换。

(2)任意进制的转换

当 N 为2的整数幂时,如 N 等于clip_image002[25]clip_image002[27]clip_image002[29]clip_image002[31],…,N 进制与二进制的转换关系则是一种拆、拼的关系。例如,三十二进制与二进制的关系是“一拆为五,五位一拼”的关系。

当 N 既不为10,也不等于2及2的整数幂时,例如 N 等于3、5、6、7、9等,N 进制之间又该如何转换呢?比如,三进制与五进制,六进制与七进制,九进制与十二进制的转换等。这时可将转换的一方化为十进制,而后就成了十与 N 的转换关系了。

参考文献:

[1]刘克武.软件设计师考试科目1:计算机与软件工程知识——考点解析及模拟训练[M].北京:清华大学出版社,2005.1.