歡迎來到二進制的世界!
你有沒有想過,電腦基本上只是一堆開關和電線的集合,它是如何讓你觀看高畫質電影或運行複雜的電子遊戲的呢?這一切都要歸功於二進制 (Binary)。在本章中,我們將一起探索電腦的「語言」。如果現在看見一堆 1 和 0 讓你感到困惑,請別擔心——看完這份筆記,你將會像電腦一樣快速地閱讀和運算!
1. 基礎概念:進位制 (Number Bases)
在深入了解二進制之前,我們先看看我們平時是如何數數的。我們使用十進制 (Base 10),這很可能是因為我們有十根手指頭!而電腦使用二進制 (Base 2),是因為它們是由電晶體組成的,電晶體只有開啟 (On, 1) 或關閉 (Off, 0) 兩種狀態。
關鍵進位制
- 十進制 (Base 10): 使用 0-9 的數字。
- 二進制 (Base 2): 只使用 0 和 1。
- 十六進制 (Base 16): 使用 0-9 和 A-F。這是人類用來作為二進制的「速記法」,因為它讀起來容易多了。例如,二進制的 10101110 在十六進制中僅為 AE!
你知道嗎? 單個二進制數位(一個 0 或 1)被稱為一個位元 (bit)。如果你將 8 個位元組合在一起,就得到一個位元組 (byte)!
快速複習:2 的次方
要掌握二進制,你必須熟記這些數字:
\( 2^0=1 \), \( 2^1=2 \), \( 2^2=4 \), \( 2^3=8 \), \( 2^4=16 \), \( 2^5=32 \), \( 2^6=64 \), \( 2^7=128 \)。
總結:
重點摘要: 進位制只是表示相同數值的不同方式。二進制是給電腦用的,十進制是給人類用的,而十六進制則是兩者之間的橋樑。
2. 無符號二進制 (Unsigned Binary)
無符號二進制僅用於表示正整數,這裡沒有辦法表示負號。
數值範圍
如果你有 \( n \) 個位元,你可以表示 \( 2^n \) 個不同的數值。
最小值永遠是 0。
最大值是 \( 2^n - 1 \)。
範例: 使用 8 個位元(一個位元組),你可以表示從 0 到 255 的數字 (\( 2^8 - 1 \))。
二進制算術
加法
這就像我們平時做的直式加法一樣!只需要記住這四條規則:
1. \( 0 + 0 = 0 \)
2. \( 0 + 1 = 1 \)
3. \( 1 + 1 = 0 \)(並向下一位進 1)
4. \( 1 + 1 + 1 = 1 \)(並向下一位進 1)
乘法
要計算無符號二進制乘法,我們使用「位移與相加 (shift and add)」的方法,這與學校學的長乘法類似。如果你將數字乘以 2,只需將所有位元向左移動一位,並在末尾補一個 0 即可!
常見錯誤: 在加法時忘記了「進位」。一定要清楚地把進位寫在下一欄的上方,這樣才不會漏掉它們!
總結:
重點摘要: 無符號二進制用於表示正數。你擁有的位元越多,能存儲的數字就越大。
3. 有符號二進制:二補數 (Two's Complement)
我們如何告訴電腦一個數字是負數呢?我們使用一種稱為二補數 (Two's Complement) 的系統。
概念
在 8 位元的二補數中,最高有效位 (Most Significant Bit,最左邊的那一位) 具有負權重。它不代表 128,而是代表 -128。
「翻轉並加一」技巧
要將一個正數轉換為負數(例如,將 \( 5 \) 轉為 \( -5 \)):
1. 寫出該正數的二進制形式(例如:00000101)。
2. 翻轉 (Flip) 所有位元(0 變 1,1 變 0)-> 11111010。
3. 將結果加 1 -> 11111011。這就是 \( -5 \)!
減法
電腦實際上並不會進行「減法」——它們只是在加上負數!要計算 \( 10 - 5 \),電腦會利用二補數計算 \( 10 + (-5) \)。
總結:
重點摘要: 二補數讓我們能同時表示正數和負數。如果最左邊的位元是 1,該數字就是負數!
4. 分數 (Fractional Numbers)
生活不僅僅是整數。有時我們需要小數(例如 10.5)。電腦使用兩種主要方法:定點數 (Fixed Point) 和 浮點數 (Floating Point)。
定點數
我們想像二進制小數點位於一個固定的位置。例如,在一個 8 位元的數字中,我們可以規定前 4 位是整數,後 4 位是分數 (\( 1/2, 1/4, 1/8, 1/16 \))。
優點: 電腦處理速度快。
缺點: 範圍有限;無法同時表示非常大和非常小的數字。
浮點數
這類似於「科學記號表示法」(例如,\( 6.02 \times 10^{23} \))。它由兩部分組成:
1. 尾數 (Mantissa): 數字的實際有效數字。
2. 指數 (Exponent): 告訴我們二進制小數點移動的位置。
正指數會將小數點向右移動(使數字變大)。
負指數會將小數點向左移動(使數字變小)。
總結:
重點摘要: 定點數簡單但僵化。浮點數複雜,但允許表示範圍極大或極小的數字。
5. 正規化與誤差
在考試中,你經常會被要求將一個浮點數正規化 (normalise)。這意味著調整尾數和指數,使數字達到最高的精確度。
如何辨識正規化數字:
- 正數的正規化數字總是以 01 開頭。
- 負數的正規化數字總是以 10 開頭。
捨入誤差 (Rounding Errors)
別擔心,如果這看起來很棘手: 某些十進制數字(例如 \( 0.1 \))無論你使用多少個位元,都永遠無法在二進制中完美表示。這就像試圖將 \( 1/3 \) 寫成十進制小數 (\( 0.3333... \)) 一樣——它會無限循環下去!這會導致微小的捨入誤差。
絕對誤差與相對誤差
- 絕對誤差 (Absolute Error): 真實數字與我們二進制版本之間的實際差值。
- 相對誤差 (Relative Error): 絕對誤差除以真實數字(通常以百分比表示)。
溢位與下溢
- 溢位 (Overflow): 當數字太大而無法裝入指定的位元中時(就像試圖將一加侖的水裝進一品脫的杯子裡)。
- 下溢 (Underflow): 當數字太小而無法表示時(就像試圖用公尺尺來測量一個原子的長度)。
總結:
重點摘要: 正規化能確保最大的精確度。然而,二進制總是有其限制,導致誤差、溢位或下溢的發生。
6. 資訊單位
最後,我們需要了解如何衡量數據。你可能認為 1 Kilobyte 是 1000 bytes,但在計算機科學中,它更具體一些!
二進制前綴 (2 的次方)
這些是電腦實際使用的單位:
- Kibi (Ki): \( 2^{10} \) (1,024 bytes)
- Mebi (Mi): \( 2^{20} \)
- Gibi (Gi): \( 2^{30} \)
- Tebi (Ti): \( 2^{40} \)
十進制前綴 (10 的次方)
這些是人類通常使用的(硬碟製造商也常使用這些來讓他們的硬碟容量看起來更大!):
- Kilo (k): \( 10^3 \) (1,000 bytes)
- Mega (M): \( 10^6 \)
- Giga (G): \( 10^9 \)
- Tera (T): \( 10^{12} \)
記憶小撇步: 如果名字裡有個 "i"(例如 Kibi),那就是基於 1024 的「聰明」電腦版本!
總結:
重點摘要: 考試時務必看清楚題目問的是十進制 (1000 進位) 還是二進制 (1024 進位) 前綴。這對你的最終答案會有很大的影響!