電腦的世界只有 0 與 1:二進位表示法

作者:
林昱誠(Yu-Cheng Lin)
閱讀時間:
5
分鐘
# 二進位表示法 在[入門系列文章](https://www.entangletech.tw/lesson/popular-02)中我們提到如何用燈泡打造電腦,這些燈泡只有開與關(亮與暗)兩種狀態,透過這兩種狀態便能執行各種運算,從簡單的四則運算到當今火紅的深度學習。 電燈泡這比喻對應到你眼前的電腦或手機,就是電路上電線的有通電和沒通電,或是高電壓與低電壓,即「1」與「0」。為了只透過這兩種狀態做運算,我們必須先將問題轉化成只有「1」與「0」表達的數學問題,即二進位制。
電燈位元

電腦計算的基本單位是位元,就如同這裡比喻的燈泡,當燈泡為暗時,代表 「0」,亮則代表 「1」,對應電腦裡,沒有電流通過代表 「0」,有電流通過則為 「1」(或是低電壓與高電壓)

由於量子電腦也只能處理 0 與 1 的問題,因此二進位制在量子計算上也很重要。 ## 十進位轉二進位 ### 整數 我們日常使用的數字系統就是十進位制,只使用數字 0 到 9,一旦數字超過 9,就回到 0 並向前進位。同樣地,二進位即數字只有數字 0 和 1,當數字超過 1 時,也回到 0 並向前進位。
“十進位”

我們來看一個簡單的例子,「19+2」。首先,我們從個位數開始計算,「9+2」,(從上圖可知,)9 的下一位是 0,再往下一位是 1,所以個位數變成 1。因為 9+2=11,超過了單位數字可以表達的範圍,所以要進位到十位數。十位數的部分是原來的 1 ,加上從個位數進位的 1,得到 2,最終結果是「21」。
19+2

將我們熟悉的數字轉成二進位,最簡單的方法就是做除法,取每次除法的餘數就是二進位,直到商為 0。以 77 為例 \begin{split} 77\div 2=38...&1\\ 38\div 2=19...&0\\ 19\div 2=9...&1\\ 9\div 2=4...&1\\ 4\div 2=2...&0\\ 2\div 2=1...&0\\ 1\div 2=0...&1 \end{split} 從最下面往上,將每條式子的餘數從左到右寫出來,即「1001101」,這就是 77 的二進位表示法。圖解如下:
77 的二進位表示

依照箭頭方向把餘數由左寫到右,即 01001101,通常最左邊的 0 可以省略(就像是 015 我們平常都直接寫 15)

以「78」的例子
78 的二進位表示

78 的二進位表示法為 1001110

讓我們看看「77+1=78」的二進位表示法。77 的二進位是 1001101,當我們加 1 時,從個位數開始,1+1 在二進位制中會進位變成 0。下一位原本是 0,加上進位的 1,變成 1。後面的數字保持不變,最終結果是 1001110,即 78 的二進位表示。
77+1=78 的二進位表示

### 小數 小數或說分數,如 78.625 該如何用二進位表示呢?首先,把整數和小數分開算,整數的部分用上述方法轉成二進位,小數部分下文會提及怎麼算,算完後以小數點為分界,小數點左邊放整數的二進位表示,右邊則放小數的二進位表示。 以 78.625 為例,拆成整數「78」和小數「0.625」兩部分。整數的部分從上述方法得出,78 的二進位表示法是 1001110。小數的部分,整數的時候是除 2,那小數的時候是乘 2,即: \begin{split} 0.625\times 2=1.25=&1+0.25\\ 0.25\times 2=0.5=&0+0.5\\ 0.5\times 2=1=&1+0 \end{split} 將結果,從式子中由上到下,由左到右書寫出「101」,再加小數點,即「.101」(或 0.101),這是 0.625 的二進位表示法。 因此 78.625 的二進位表示法為 1001110.101 ### 負數 負數,如 -2 的二進位表示法,在初階量子計算中很少用到,因此在這裡不做詳細介紹。如果有興趣想了解更多,可以參看這篇[科普文章](https://kopu.chat/%E4%B8%96%E7%95%8C%E4%B8%8A%E5%8F%AA%E6%9C%8910%E7%A8%AE%E4%BA%BA%EF%BC%8C%E4%B8%80%E7%A8%AE%E6%98%AF%E6%87%82%E4%BA%8C%E9%80%B2%E4%BD%8D%E7%9A%84/) ## 二進位轉十進位 將數學問題(像是 77+1)轉成二進位給電腦做計算,計算結果是不太直觀的二進位表示法,需要轉回我們熟悉的十進位,呈現在螢幕上,我們才能直觀解讀計算結果。 我們知道,將 78 轉成二進位是除 2,那要逆回來變成十進位就是乘 2,在介紹如何乘 2 回來之前,我們用另一個角度回顧十進位:
78 十進位表示法

70+8 等於 78

從上圖可知,十進位制的意思就是以 10 為基底(即 $10^n$)表達數字 \begin{split} 78_{10}&=7\times 10+8\times 1\\ &=7\times10^1+8\times10^0 \end{split} 同樣道理,二進位制就是以 2 為基底表達數字:
1001110 轉成十進位

把圖上數字都加起來 \begin{split} 1001110_2&=1\times2^6+0\times2^5+0\times2^4+1\times2^3+1\times2^2+1\times2^1+0\times2^0\\ &=64+0+0+8+4+2+0\\ &=78 \end{split} 如果是小數點,剛剛是透過乘 2 轉成二進位,那逆回來十進位就要除 2,不過我們可以用更 general 的方法來表達,即 $\times 2^{-n}$,以 1001110.101 為例:
1001110.101 轉成十進位

看粉色的部分,透過除 2 的方式將小數點的部分從二進位轉回十進位

## 後記 學會了這些方法後,你將能輕鬆地將任何數字從十進位轉成二進位,再轉回來,更進一步,你還可以轉換到其他進位制,如三進位、十六進位等。 在下一篇文章,我們將介紹電腦的「邏輯閘」操作,並說明如何透過邏輯閘來操作二進位數字,以實現各種計算和運算。

本文章採用創用 CC「姓名標示-相同方式分享 4.0 國際」授權條款

課程目錄