ATTAINTION: 由于HEXO目前对于MathJax的支持不甚完善,如果数学公示渲染错误请刷新或前往我的LUOGU博客以获最佳体验
关于进制转换的问题最详细解释
1.前言
很久前曾经系统学习过进制转换的问题,但发现…忘了?!好吧所以就再重新学习下然后写篇博客吧。这次可不要再不求甚解了。
那么就开始吧,先说下最基础的,如何把十进制数 a 转化为任意正 r 进制数。
在十进制下$\forall n \in Z $,都可以将它表示为
$$
A_1\times10^{n-1}+A_2\times10^{n-2}+…+A_n\times10^{0}
$$
其中 ${A_i}\in{Z}^{+}$ ,其中的 ${A}_{i}$ 就是这个整数每一位的值。很显然的可以对它进行推广,$\forall$ r $\in$ R 都有以上结论成立。很显然我们要做的就是获得在 r 进制下的$A_i$的值。获得方法也很简单。那就是将这个整数对 r 不停地取模,然后将它除以 r 向下取整。稍微考虑下就可以发现它的原理(如果是特殊情况的话需要稍加更改,比如负进制)。
下面举个简单的例子,将十进制下的 6 转换为二进制。按照刚才的步骤,将其对 2 取模,发现是零,这里的意义其实就是, 6 在二进制下的最后一位是 0 ,因为它 %2 为零,就说明它不需要 $2^0$ 这个数所以这一位为0,就是我们上面所讲$A_1$=0。的这是很显然的。然后让 6 / 2 得到 3 这就相当于对于 6 的二进制数忽略掉最后一位重复刚才的过程。因为100(base2)相当于10*2(base2)对吧。那么再让 $3%2$ ,得到 1 ,刚才讲到,这里的 1 默认是乘以二的所以就说明 6 需要 $2^{0+1}$ 就是$2^1$ 那么1就是前面我们所讲到的$A_{2}$。我们一直重复刚才的过程就可以得到 6 的二进制表示:110
即为$1 \times 2^{2}+1 \times 2^{1}+0 \times 2^{0}$很简单吧^_^
2.代码
1 |
|