简单讲讲二进制与十进制的转换
本文写于 2020 年 9 月 12 日
很多人觉得二进制很奇妙,很难转换,但其实没那么夸张。
首先看一个简单的十进制数:123
。
对于 123
而言,是 100 + 20 + 3
的结果,也就是 1*100 + 2*10 + 3*1
。
再进一步拆分成 10^n(十的 n 次方)后就可以表示为 1*10^2 + 2*10^1 + 3*10^0
。
OK,我们先列个表看看:
10^2 | 10^1 | 10^0 |
---|---|---|
2^2 | 2^1 | 2^0 |
3^2 | 3^1 | 3^0 |
8^2 | 8^1 | 8^0 |
在这里我们将十进制的规则替换到了 2、3、8 进制上。
这个表有啥用呢?
我们来看几个简单的例子,十进制的 2,在二进制中是就是 10,这点我们非常清楚。
我们将 10 放入表中:
10^1 | 10^0 |
---|---|
0 | 2 |
2^1 | 2^0 |
---|---|
1 | 0 |
对比一下两表,我们会惊奇的发现一个式子:1*2^1 + 0*2^0
。
诶?!这不就是 2 吗?
所以我们现在学会了二进制转十进制的方法,就是将二进制的每一位,乘上二的位数减一次方后相加。
十进制转二进制相对而言要更麻烦一点,也更难想——我们需要解出一个公式:
十进制数 = a*1 + b*2 + c*4 + d*8 + e*16 + ……
(这里的 a、b、c……都表示的是 0 或 1)
进一步扩展可以得到 m 进制转换 n 进制的算法:
a1 * m^0 + b1 * m^1 + c1 * m^2 + ... = a2 * n^0 + b2 * n^1 + c2 * n^2 + ...
例如 50。可以表示为:0*1 + 1*2 + 0*4 + 0*8 + 1*16 + 1*32
,所以 50 的二进制为 110010。
13 呢?可以表示为 1*1 + 0*2 + 1*4 + 1*8
,即为 1101。
(完)