除k取余法,主要用于把十进制的数化为k进制的数。
原理:
- 不同进制的数之间可以相互转化。
- 任意 k进制数,都可以写作 an*kn + an-1*kn-1 + an-2*kn-2 + …… + a1*k1 + a0*k0 的 按权展开式。
- k进制中,k是确定的,各个位的位权也是确定的,那么进制转换的本质就可以理解为:求各个位之前的系数 an、 an-1、 an-2…… a1、 a0 的值
例子:
将十进制数36转二进制表示?
- 因为不同进制的数之间可以相互转化,所以十进制必然可以转化为二进制,则可以设:
36 = an*2n + an-1*2n-1 + an-2*2n-2 + …… + a1*21 + a0*20 - 对 十进制数36 和 36的二进制展开式 除 k(这里的 k=2):
2| 36 ····· 0 2 | an*2^n + …… + a2*2^2 + a1*2^1 + a0*2^0 ····· a0 ————— ————————————————————————————————————————————— 2| 18 ····· 0 2 | an*2^(n-1) + …… + a2*2^1 + a1*2^0 ····· a1 ————— ___________________________________________ 2| 9 ····· 1 2 | an*2^(n-2) + …… + a3*2^1 + a2*2^0 ····· a2 ____ _________________________________________ 2| 4 ····· 0 2 | an*2^(n-3) + …… + a4*2^1 + a3*2^0 ····· a3 ——— ——————————————————————————————————————— 2|2 ····· 0 2 | an*2^(n-4) + …… + a5*2^1 + a4*2^0 ····· a4 —— ————————————————————————————————————— 1 ····· 1 a5 ····· a5
- 根据第二步的对比,可知:
n=5;且 a5=1,a4=0,a3=0,a2=1,a1=0,a0=0 。
所以 36 的二进制表示为 100100 。
任意进制转换
根据以上原理,可以使用 除k取余法 实现任意进制之间的转换。
如:将五进制数32转三进制表示:
3| 32 ····· 2 3 | an*3^n + …… + a2*3^2 + a1*3^1 + a0*3^0 ····· a0 ————— ————————————————————————————————————————— 3| 10 ····· 2 3 | an*3^(n-1) + …… + a2*3^1 + a1*3^0 ····· a1 ———— ——————————————————————————————————————— 1 ····· 1 a2 ····· a2
则 五进制数32 的三进制表示为 122 。