歡迎來到數據的世界!

你有沒有想過,電腦是如何分辨你想相加的「數字」、你名字裡的「字母」,還是測驗中「真/假」的答案呢?由於電腦底層實際上只懂電訊號(開或關),我們需要利用數據類型 (Data Types) 來告訴電腦如何解讀這些 1 和 0。在本章中,我們將探討數據的「基礎組件」,以及電腦如何處理數字、文本和邏輯。如果一開始覺得數學部分很多,請別擔心——一旦你看出了其中的規律,這就像學會了一種秘密代碼一樣有趣!

1. 「基礎知識」:原始數據類型

在我們深入探討二進制之前,先來看看我們給數據貼上的標籤。想像這些數據類型就像形狀不同的容器;你不會把湯裝進濾網裡,同樣地,你也不會把名字存放在「數字」盒子裡。

你需要掌握的「五大類型」:

  • 整數 (Integer): 整數(例如:7, -12, 1066)。不允許有小數點!
  • 實數 (Real/Floating Point): 帶有小數部分的數字(例如:3.14, -0.5, 10.0)。
  • 字符 (Character): 單個字母、數字或符號(例如:'A', '!', '3')。
  • 字符串 (String): 字符的集合,通常用於文本(例如:"Hello World", "Computer Science")。
  • 布林值 (Boolean): 只有兩個值:True(真)False(假)(常用於開關或邏輯判斷)。

快速複習: 你會為價格使用哪種數據類型?實數 (Real)。那班級裡學生的人數呢?整數 (Integer)

2. 數字系統:二進制與十六進制

我們日常生活中使用十進制 (Denary)。電腦則使用二進制 (Binary)。有時,人類會使用十六進制 (Hexadecimal) 作為簡寫,因為二進制寫起來實在太長且令人困惑!

二進制 (Binary, 基數 2)

二進制只使用兩個數字:01。二進制的每一「位」都是 2 的冪次方。

示例:二進制數 1011
\( (1 \times 8) + (0 \times 4) + (1 \times 2) + (1 \times 1) = 11 \) (十進制)。

十六進制 (Hexadecimal, 基數 16)

十六進制使用 0-9,然後用 A, B, C, D, E, F 來表示 10-15 的值。對人類來說,閱讀 'FF' 比閱讀 '11111111' 要容易得多!

如何將十六進制轉換為二進制:
將每個十六進制數字轉換為 4 位的二進制「半字節 (nibble)」。
示例:十六進制 'A3'
A = 10 = 1010 (二進制)
3 = 3 = 0011 (二進制)
因此,A3 = 10100011

你知道嗎? 十六進制常用於 HTML 顏色代碼(例如 #FF0000 代表紅色)和 MAC 地址。

重點總結: 二進制是給電腦看的;十六進制是人類便於閱讀的二進制簡寫;十進制是給我們人類用的。

3. 二進制算術:加法與減法

二進制的加法和十進制很像,只是你會更早發生「進位」!

加法規則:

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

常見錯誤: 忘記進位 1 會導致整道算式出錯。請務必在下一位的上方清楚寫下你的進位數!

減法:

在 OCR 課程大綱中,我們通常通過加上一個負數來進行減法。要做到這一點,我們首先需要知道如何表示負數。

4. 負數:符號位與數值表示法 (Sign & Magnitude) 和 二補數 (Two's Complement)

由於二進制中沒有 "-" 符號,我們必須用一位來表示正負號。

符號位與數值 (Sign and Magnitude)

最左側的位元稱為符號位 (Sign Bit)
0 = 正數 (+)
1 = 負數 (-)
示例(8-bit): 00000101 是 +5。10000101 是 -5。

二補數 (Two's Complement)

這是最推薦的方法,因為它讓 CPU 的運算更簡單。若要將一個正數變為負數:
1. 從正數的二進制開始。
2. 反轉 (Flip) 所有位元(0 變 1,1 變 0)。
3. 將結果加 1

記憶口訣: 「反轉並加一」,即可輕鬆將正數變負數!

關鍵總結: 二補數更好,是因為它允許電腦使用與加法相同的硬件來進行減法運算。

5. 實數:浮點數表示法 (Floating Point Representation)

我們該如何在二進制中儲存 12.5?我們使用類似科學記號表示法(例如 \(1.25 \times 10^1\))的方法。在二進制中,它被拆分為兩部分:尾數 (Mantissa)指數 (Exponent)

公式: \( \text{Number} = \text{Mantissa} \times 2^{\text{Exponent}} \)

歸一化 (Normalisation)

為了確保盡可能精確,我們會對數字進行歸一化。歸一化後的正數總是從 01 開始;歸一化後的負數總是從 10 開始。

如果一開始覺得困難,請別擔心: 只要記住尾數給你「數字」,而指數告訴你小數點該往哪移。正指數將小數點向右移;負指數將小數點向左移。

快速複習: 進行歸一化是為了在給定位元數下提供最大精確度

6. 字符集:ASCII 與 Unicode

字符集是一個龐大的「查詢表」,將唯一的二進制數與特定的字符連接起來。

  • ASCII: 使用 7 或 8 位元,可以表示 128(或 256)個字符。非常適合英語,但沒有足夠空間容納符號(如表情符號)或不同語言(如中文或阿拉伯語)。
  • Unicode: 使用 16 或 32 位元,可以表示數百萬個字符!它包含了所有語言,甚至包括 🍕 表情符號。

權衡考量: Unicode 可以表示更多字符,但與 ASCII 相比,它在每個字符上佔用更多儲存空間

你知道嗎? Unicode 的前 128 個編碼與 ASCII 完全相同,以保持兼容性!

本章總結

  • 原始數據類型: 數據的基本標籤(整數、實數等)。
  • 二進制/十六進制: 我們如何用基數 2 和 16 表示數字。
  • 二補數: 處理負數最聰明的方法。
  • 浮點數: 我們如何使用尾數和指數處理小數。
  • 字符集: 用於基礎的 ASCII 和涵蓋一切的 Unicode。