歡迎來到二進制的世界!

你有沒有想過,電腦明明只是一堆電線和塑料,卻能讓你觀看高清電影、玩大型遊戲或幫你寫報告?這一切都源於一個非常簡單的概念:二進制(Binary)。在本章中,我們將探討電腦如何僅利用 0 和 1 這兩個數字來完成所有任務!如果一開始覺得這像外星語言,請別擔心;讀完這些筆記後,你將能像專家一樣輕鬆地用「電腦語言」溝通。

1. 什麼是二進制?為什麼我們使用它?

電腦由數以十億計的微小開關組成,稱為晶體管(Transistors)。這些開關只有兩種狀態:開(ON,以 1 表示)關(OFF,以 0 表示)。這種「雙狀態」系統就是我們所說的二進制

關鍵概念

  • 位元(Bit):數據的最小單位。它是 Binary Digit 的縮寫,只能是 0 或 1。
  • 二進制模式(Binary Pattern):一系列位元的組合(如 1010),代表著特定的數據或指令。
  • 狀態(States):你使用的位元越多,能創建的唯一「模式」或「狀態」就越多。

數學小技巧:有多少種狀態?

想知道一個二進制模式能代表多少種不同的東西,可以使用這個簡單的公式:\(2^n\),其中 \(n\) 代表位元的數量。
例子: 如果你有 3 個位元,你可以有 \(2^3\) (\(2 \times 2 \times 2\)) = 8 種不同的狀態。

你知道嗎?電腦上的一切——圖像、音樂,甚至是你在這裡讀到的文字,都是以一長串 0 和 1 的形式存儲的!

重點總結:電腦使用二進制是因為它們的硬件是由只有兩種狀態(開/關)的開關組成的。我們使用公式 \(2^n\) 來計算一組位元可以存儲多少個數值。


2. 處理數字:無符號整數(Unsigned Integers)

十進制(Denary)系統中(我們日常使用的基數 10 系統),我們有個位、十位、百位等。而在二進制(Binary)(基數 2)中,每向左移動一位,位值就會翻倍。

8 位元二進制表

為了考試,你需要記住 8 位元的數字。以下是各位的值:

128, 64, 32, 16, 8, 4, 2, 1

如何將二進制轉換為十進制

1. 畫出表格。
2. 將你的二進制數字(例如 10001010)填入表格中。
3. 將有 1 的位置上的數值加起來。

例子:10001010
\(128 + 8 + 2 = 138\)

如何將十進制轉換為二進制

1. 從左邊開始(128)。
2. 如果你的數字大於該位值,寫下 1 並減去該值。
3. 如果不大於,寫下 0 並移動到下一欄。

快速回顧:無符號整數永遠是正數。一個 8 位元的無符號整數可以表示 0 到 255 之間的數字。


3. 有符號整數:二補數(Two's Complement)

電腦也需要存儲負數,我們使用一種稱為二補數(Two's Complement)的系統。在這個系統中,最高有效位(Most Significant Bit,最左邊的那一位)變為負數

8 位元有符號表

-128, 64, 32, 16, 8, 4, 2, 1

「翻轉並加 1」的技巧

如果你需要將正數變為負數:
1. 寫出該正數的二進制形式(例如:5 是 00000101)。
2. 反轉(Invert)所有位元(0 變 1,1 變 0) -> 11111010。
3. 將結果加 1 -> 11111011。這就是 -5!

常見錯誤:別忘了在二補數中,8 位元的範圍是 -128 到 +127。它與無符號整數的範圍不同!

重點總結:二補數通過將最左邊的位元定義為負值,使電腦能夠表示負數。


4. 二進制加法

二進制加法就像普通加法一樣,只是你需要更快地進行「進位(Carry over)」!

四個規則:

  • \(0 + 0 = 0\)
  • \(0 + 1 = 1\)
  • \(1 + 1 = 0\) (進位 1)
  • \(1 + 1 + 1 = 1\) (進位 1)

什麼是溢出(Overflow)?

想像一輛汽車的里程錶只有 3 位數。如果你開到 999 再多走一英里,它會歸零變為 000。這就是溢出。在二進制中,如果你將兩個 8 位元數字相加,結果需要第 9 位,那麼多出來的位元就會丟失。這可能會導致電腦計算出錯誤答案甚至當機!

重點總結:二進制加法遵循簡單的規則,但當結果太大而無法放入分配的位元數時,就會發生溢出


5. 二進制移位

向左或向右移位是電腦進行乘法或除法運算的一種極快方法。

邏輯移位(用於無符號整數)

  • 左移(Left Shift):將所有位元向左移動。右邊留下的空位補 0。每移動一次,數字就會乘以 2
  • 右移(Right Shift):將所有位元向右移動。每移動一次,數字就會除以 2(忽略餘數)。

算術移位(用於有符號整數)

當你對一個有符號(二補數)數字進行右移時,你必須保持符號位(最左邊的位元)不變,以確保負數依然保持為負數。

記憶小撇步:左(Left)代表變大(Larger/Multiply)右(Right)代表減少(Reduce/Divide)


6. 十六進制(Hexadecimal,基數 16)

二進制對電腦很方便,但人類很難閱讀像 11011010 這樣長的一串數字。因此,我們使用十六進制作為「簡寫」。

為什麼要用十六進制?

  • 人類更易於閱讀和記憶。
  • 輸入時出錯的機會較少。
  • 十六進制與二進制之間的轉換非常簡單。

十六進制的值

十六進制使用 0-9,然後用字母表示 10-15 的值:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A(10), B(11), C(12), D(13), E(14), F(15)

如何將二進制轉換為十六進制

1. 將 8 位元二進制拆分為兩組 4 位元(稱為半位元組 Nibbles)。
2. 計算每組半位元組的十進制值(0-15)。
3. 將該值轉換為對應的十六進制字符。

例子:1010 1100
1010 = 10 (十六進制為 A
1100 = 12 (十六進制為 C
結果 = AC

快速回顧:一個十六進制位元精確代表 4 個位元(bits)。兩個十六進制位元代表 8 個位元(1 個字節 Byte)

重點總結:十六進制是一種對人類友好的二進制表示法。它並不會改變電腦的工作方式,只是讓程序員的工作變得更輕鬆!