歡迎來到主題 2:數據表示!

你有沒有想過,電腦是如何分辨高清電影、文字訊息和電子遊戲的呢?其實,電腦的核心只是一堆微小的開關,狀態非 ONOFF。在本章中,我們將學習電腦如何利用這些簡單的開關(二進制)來表示數位世界中的一切。如果剛開始覺得涉及很多數學運算,別擔心——一旦你掌握了當中的規律,這就像學會了一種秘密代碼一樣!

2.1 二進制的威力

什麼是二進制?

電腦使用二進制 (binary),因為它們由類似開關的電晶體組成。我們將「OFF」表示為 0,將「ON」表示為 1。這些單個的 0 和 1 被稱為位元 (bits)(是 Binary Digits 的縮寫)。

你知道嗎? 一個位元是電腦能儲存的最小數據單位。它就像你家裡的一個電燈開關!

狀態數量

如果你有特定數量的位元,你能表示多少種不同的事物呢?有一個簡單的公式:\( 2^n \),其中 \( n \) 是位元的數量。
例如: 如果你有 3 個位元,你可以表示 \( 2^3 = 8 \) 種不同的狀態(000、001、010、011、100、101、110、111)。

無符號整數與有符號整數

電腦需要儲存正數和負數:
1. 無符號整數 (Unsigned Integers): 僅包含正數(0 及以上)。
2. 二補數 (Two’s Complement)(有符號整數): 這是一種同時表示正數和負數的方法。最高有效位元 (most significant bit)(最左邊的那一位)代表負值。

快速複習: 在 8 位元的二補數中,最左邊的位元代表 \( -128 \) 而不是 \( +128 \)。這讓我們可以儲存從 \( -128 \) 到 \( +127 \) 的數字。

二進制加法

二進制加法與普通加法一樣,但當數值達到 2 時就需要進位!
- \( 0 + 0 = 0 \)
- \( 0 + 1 = 1 \)
- \( 1 + 1 = 0 \)(進位 1)
- \( 1 + 1 + 1 = 1 \)(進位 1)

常見錯誤: 忽略了溢位 (Overflow)。如果你將兩個 8 位元的數字相加,而結果需要 9 位元才能表示,電腦可能會忽略多出來的那一位。這就是溢位錯誤 (overflow error),可能會導致程式崩潰或給出錯誤答案!

位元移位

將位元向左或向右移位是一種快速乘法或除法的方法。
- 邏輯左移 (Logical Shift Left): 將位元向左移動,右邊補 0。移動 1 位相當於將數字乘以 2
- 邏輯右移 (Logical Shift Right): 將位元向右移動。移動 1 位相當於將數字除以 2(捨棄任何餘數)。
- 算術移位 (Arithmetic Shift): 用於有符號數,以保持負號位元不變。

十六進制 (Hexadecimal / Hex)

十六進制是一種基數為 16 的系統。它使用 0-9 以及 A、B、C、D、E、F 來代表 10-15 的值。
為什麼要用它? 與長串的二進制相比,人類閱讀和記憶十六進制要容易得多。一個十六進制數字正好代表 4 個位元(一個半字節 nibble)。

重點提示: 二進制是給電腦看的;十六進制則是人類為了更容易理解二進制而使用的「速記法」。

2.2 表示文字、圖像和聲音

文字:ASCII

為了儲存文字,電腦會給每個字元分配一個唯一的數字。7 位元 ASCII 是一種標準代碼,可以表示 128 種不同的字元(包括大寫字母、小寫字母、數字和符號)。
例如: 在 ASCII 中,字母 'A' 由十進制數字 65 表示。

圖像:點陣圖 (Bitmaps)

數位圖像由稱為像素 (pixels)(影像元素)的微小點組成。
- 解像度 (Resolution): 圖像中的像素數量(例如,闊度 x 高度)。
- 色彩深度 (Colour Depth): 每個像素所使用的位元數。每個像素的位元數越多,顏色就越豐富!
公式: \( \text{總顏色數} = 2^{\text{色彩深度}} \)

聲音:類比轉數位

聲音本質上是類比 (analogue) 波。為了儲存聲音,電腦會定期對聲波進行「快照」。這稱為採樣 (sampling)
- 採樣率 (Sample Rate): 每秒進行採樣的次數(以赫茲 Hz 為單位)。
- 位元深度 (Bit Depth): 用於記錄每次採樣時聲波振幅 (amplitude)(高度)的位元數。
- 採樣間隔 (Sample Interval): 每次採樣之間的時間間隙。

類比: 想像一張山的數碼照片。「解像度」就像相機有多少萬像素,而聲音的「採樣率」就像影片的每秒幀數 (FPS)。數值越高通常質量越好,但產生的檔案也越大!

重點提示: 將現實世界的數據(圖像/聲音)轉換為二進制,總是在質量檔案大小之間進行權衡。

2.3 數據儲存與壓縮

測量數據

你需要了解這些單位!在計算機科學中,我們使用二進制倍數(基於 1024):
- 位元 (Bit): 1 或 0
- 半字節 (Nibble): 4 個位元
- 字節 (Byte): 8 個位元
- 千位元組 (Kibibyte, KiB): 1024 個字節
- 兆位元組 (Mebibyte, MiB): 1024 KiB
- 吉位元組 (Gibibyte, GiB): 1024 MiB
- 太位元組 (Tebibyte, TiB): 1024 GiB

記憶口訣: Killy Might Get Tired (Kibi, Mebi, Gibi, Tebi)。

數據壓縮

壓縮可以縮小檔案,從而佔用更少的儲存空間,並在網際網路上傳輸得更快。

1. 有損壓縮 (Lossy Compression)

這會永久刪除部分數據以縮小檔案大小。你會損失一些質量,但通常人類無法察覺(例如 JPEG 圖像或 MP3 歌曲)。
警告: 一旦數據被刪除,就無法還原原始數據了!

2. 無損壓縮 (Lossless Compression)

這可以在不丟失任何資訊的情況下縮小檔案。它透過尋找數據中的規律來進行更高效的儲存。
例如: 如果一個檔案中有 100 個連續的 "A",與其寫成 "AAAA...",不如寫成 "100xA"。這對於文字檔案或程式碼非常有用,因為每一個字元都很重要。

重點提示: 多媒體(照片/音樂)使用有損壓縮以節省大量空間。對於文件和程式碼,請使用無損壓縮,因為你不能承受丟失任何一個位元!

最終快速複習

二進制: 基數為 2 (0, 1)。
十六進制: 基數為 16 (0-F)。
字元集: 字元及其對應的二進制代碼列表 (ASCII)。
點陣圖: 由像素組成的圖像。
採樣: 將類比聲音轉換為數位訊號。
壓縮: 縮小檔案大小(有損 = 數據丟失,無損 = 無數據丟失)。

如果剛開始覺得有點複雜,別擔心!多練習將小數字在二進制和十進制之間轉換,其餘的內容很快就會融會貫通。你一定做得到!