歡迎來到資訊表示法 (Information Representation)!

你有沒有想過,電腦本質上只是一堆微小的電子開關,它是如何讓你觀看高畫質電影、播放你最愛的歌曲,或是儲存你的作業?這一切都要歸功於資訊表示法。在本章中,我們將探討電腦如何將現實世界「翻譯」成 1 和 0。如果一開始覺得這些概念有點「天外來客」,請不用擔心——我們會一步一步為你拆解!


1.1 數據表示法:基礎概念

二進位量級:Kilo 與 Kibi 的混淆

在「人類」的世界中,我們使用十進位系統 (Base 10)。當我們說「kilo」時,指的是 1,000。然而,電腦使用二進位系統 (Base 2),所有數值都以 2 的冪次運作。這導致我們在衡量數據時產生了細微的差異。

十進位前綴 (Base 10): 這是你日常生活中使用的單位。

  • kilo (k): \(10^3\) = 1,000
  • mega (M): \(10^6\) = 1,000,000
  • giga (G): \(10^9\) = 1,000,000,000
  • tera (T): \(10^{12}\) = 1,000,000,000,000

二進位前綴 (Base 2): 這些是電腦的「真實」測量單位。

  • kibi (Ki): \(2^{10}\) = 1,024
  • mebi (Mi): \(2^{20}\) = 1,048,576
  • gibi (Gi): \(2^{30}\) = 1,073,741,824
  • tebi (Ti): \(2^{40}\) = 1,099,511,627,776

記憶小撇步: 如果詞彙中間帶有「bi」(例如 kibi),它就代表 Binary(二進位),因此它使用的是 1,024 倍數的刻度!


數值系統:二進位、十進位與十六進位

在計算機科學中,我們主要使用三種數值系統:

  1. 十進位 (Denary/Base 10): 我們每天使用的 0-9 數字。
  2. 二進位 (Binary/Base 2): 只有 0 和 1。這是電腦的母語。
  3. 十六進位 (Hexadecimal/Base 16): 使用 0-9 以及 A-F(其中 A=10, B=11, C=12, D=13, E=14, F=15)。

為什麼要用十六進位? 它比二進位簡短得多,且人類閱讀時較不容易出錯。一個「十六進位」數字恰好代表 4 個二進位位元(稱為一個 nibble)。

快速回顧: 要將二進位轉換為十六進位,請從右邊開始將二進位數字每 4 個一組分開。例如,\(1011 | 0101\) 會變成 \(B | 5\),即 \(B5_{16}\)。


二進位編碼十進位 (BCD)

BCD 是一種特殊的數字表示法,將十進位數字的每一個位數各自儲存為 4-bit 的二進位碼。

例子: 要以 BCD 表示數字 85:
8 = 1000
5 = 0101
因此,85 的 BCD 表示為 1000 0101

現實應用: BCD 常見於數位時鐘或計算機,因為這些設備需要個別控制螢幕上的每一個位數。


帶符號整數:一補數與二補數

電腦如何辨識一個數是負數?我們使用二補數 (Two's Complement)

步驟:如何使用二補數將數字變為負數:

  1. 先寫出該數字的正數二進位形式。
  2. 反轉 (Flip) 所有位元(將 0 改為 1,1 改為 0)。這稱為「一補數 (One's Complement)」。
  3. 將結果加 1。這就是「二補數」。

常見錯誤: 別忘了在 8-bit 的帶符號數字中,最左邊的位元是符號位元 (sign bit)。如果它是 1,該數字就是負數!

二進位加法與溢位: 當你進行二進位加法時,結果有時會大到無法放入規定的位元數(例如將兩個 8-bit 的數字相加,卻得到 9-bit 的答案)。這稱為溢位 (Overflow),它可能會導致電腦運算錯誤!

重點總結: 二進位是給電腦用的,十六進位是讓人更容易閱讀二進位,而二補數則是處理負數的方法。


1.2 多媒體:圖形與聲音

點陣圖 (Bitmapped Graphics)

點陣圖由稱為像素 (pixels)(圖片元素)的微小點組成。每個像素都被分配了一個二進位顏色代碼。

  • 影像解析度: 影像的寬度像素數乘以高度像素數(例如 1920 x 1080)。
  • 色深 (Color Depth / Bit Depth): 用來表示單一像素顏色的位元數。使用的位元越多,顏色就越豐富(例如 8-bit 色深允許 \(2^8 = 256\) 種顏色)。
  • 檔案標頭 (File Header): 檔案中儲存有關影像資訊的一小部分數據,例如解析度和色深。

計算檔案大小:
\(檔案大小 = 解析度 (寬 \times 高) \times 色深\)
例子: 一張 100x100 且具備 1-bit 色深的圖片,檔案大小為 10,000 bits。


向量圖 (Vector Graphics)

向量圖不儲存像素,而是儲存一張繪圖列表,包含數學物件(線條、圓形、矩形)及其屬性(顏色、粗細、位置)。

比喻: 點陣圖就像照片;如果你放大太多,它會變得「有塊狀感」(像素化)。向量圖則像是一組繪圖指令;即使你把它放大得跟房子一樣大,看起來依然完美清晰!


聲音

聲音本質上是類比 (analogue) 的(連續波形),但電腦是數位 (digital) 的。為了儲存聲音,我們必須進行取樣 (sampling)

  • 取樣: 在固定的時間間隔內,「快照」聲音波形的振幅。
  • 取樣率 (Sampling Rate): 每秒進行多少次取樣(單位為赫茲,Hz)。取樣率越高 = 品質越好但檔案越大。
  • 取樣解析度 (Sampling Resolution): 用來儲存每個取樣點的位元數。解析度越高 = 對聲音音量的表示就越精確。

你知道嗎? 標準 CD 使用的取樣率為每秒 44,100 次!這可是大量的快照。

重點總結: 點陣圖使用像素;向量圖使用數學。聲音是透過將類比波形取樣成數位位元來捕捉的。


1.3 壓縮 (Compression)

壓縮是將檔案變小的過程。我們為什麼需要它?為了節省儲存空間,並讓檔案在網路上傳輸得更快。

破壞性與非破壞性壓縮

  1. 破壞性壓縮 (Lossy Compression): 永久刪除一些人類眼睛或耳朵不太可能注意到的數據。一旦刪除,就無法恢復。(例子:JPEG, MP3)。
  2. 非破壞性壓縮 (Lossless Compression): 在不遺失任何原始數據的情況下減小檔案大小。當你解壓縮時,它與原始檔案完全相同。(例子:PNG, ZIP)。

遊程編碼 (Run-Length Encoding, RLE)

RLE 是一種簡單的非破壞性壓縮形式。它尋找連續重複的數據片段,並將其儲存為一個單一數值和一個計數。

例子: 想像一排像素:WWWWWBBRRR
使用 RLE,我們將其儲存為:5W, 2B, 3R
我們剛剛把 10 個字元變成了 6 個!這對於具有大面積相同顏色的簡單影像非常有效。

快速回顧: 當你需要極小的檔案且不介意品質輕微下降時(例如串流影片),使用破壞性壓縮。當數據必須完美無缺時(例如文字文件或程式碼),使用非破壞性壓縮

重點總結: 壓縮節省空間。破壞性壓縮丟棄數據;非破壞性壓縮透過巧妙的儲存方式保留一切完美細節。