簡單講講二進制與十進制的轉換
本文寫於 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。
(完)
