进制表示以及转换
不同进制数的表示
数的根本乃是对于数量的统计。一个n进制的数,其核心定义为:
\[[a_{p}\cdots a_{2}a_{1}.a_{-1}a_{-2}\cdots a_{q}]_{n} = a_{p}*n^{p-1}+\cdots +a_{2}*n^{1}+a_{1}*n^{0}+a_{-1}*n^{-1} + a_{-2}*n^{-2}\cdots a_{q}*n^{q}
\]
- 左侧是该数的符号表示
- 右侧是该数的实际数量表示。而n则是决定了该数每一位的权值,也就是进制。
转换
转换的核心仍然是数的定义,及上述的公式。
\[[a_{p}\cdots a_{2}a_{1}.a_{-1}a_{-2}\cdots a_{q}]_{n} = a_{p}*n^{p-1}+\cdots +a_{2}*n^{1}+a_{1}*n^{0}+a_{-1}*n^{-1} + a_{-2}*n^{-2}\cdots a_{q}*n^{q}
\]
如果你能够以任意进制计算公式右侧的数量,那么恭喜你,你可以不用继续向下看了,因为你已经完成了对于任意进制之间的转换,而且十分的高效。
但是,一般人,比如说我,仅仅会以十进制完成计算,那么就必须以十进制为基点(桥梁)来完成其他进制的转换工作。所以下面的转换将以十进制为核心展开。
n进制》十进制
\[[a_{p}\cdots a_{2}a_{1}.a_{-1}a_{-2}\cdots a_{q}]_{n} = a_{p}*n^{p-1}+\cdots +a_{2}*n^{1}+a_{1}*n^{0}+a_{-1}*n^{-1} + a_{-2}*n^{-2}\cdots a_{q}*n^{q}
\]
十进制》n进制
将十进制将n进制进行转换时,需要将概述的整数部分以及小数部分进行分离,因为它们使用的是完全不同的方法,甚至是对立的。
整数部分
\[\begin{align}
&& [m]_{10} & = [a_{p}\cdots a_{2}a_{1}]_{n} \\
&& [[m]_{10} & = a_{p}*n^{p-1}+\cdots +a_{2}*n^{1}+a_{1}*n^{0}\\
\end{align}
\]
我们的目的,就是计算得到 {a1, a2,... , ap} 。
需要注意的是:两侧的运算都是十进制运算。
计算流程为:
- 将m进行除以n,那么余数为a1,商为m1。
- 将m1进行除以n,那么余数为a2,商为m2。
- .....
- 最终,余数为ap,商为0。
上面的方法可以形式化为:
小数部分
\[\begin{align}
&& [m]_{10} & = [0.a_{1} a_{2}\cdots a_{q}]_{n} \\
&& [[m]_{10} & = a_{1}*n^{-1}+a_{2}*n^{-2}+\cdots+a_{q}*n^{-q}\\
\end{align}
\]
我们的目的,就是计算得到 {a1, a2,... , ap} 。
需要注意的是:两侧的运算都是十进制运算。
计算流程为:
- 将m进行乘n,那么整数部分为a1,小数部分为m1。
- 将m1进行乘n,那么整数部分为a2,小数部分为m2。
- .....
- 最终,整数数部分为ap,小数部分为0。
引用
引用自:理解进制转换的原理