歡迎來到資訊表示法 (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 倍數的刻度!
數值系統:二進位、十進位與十六進位
在計算機科學中,我們主要使用三種數值系統:
- 十進位 (Denary/Base 10): 我們每天使用的 0-9 數字。
- 二進位 (Binary/Base 2): 只有 0 和 1。這是電腦的母語。
- 十六進位 (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)。
步驟:如何使用二補數將數字變為負數:
- 先寫出該數字的正數二進位形式。
- 反轉 (Flip) 所有位元(將 0 改為 1,1 改為 0)。這稱為「一補數 (One's Complement)」。
- 將結果加 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)
壓縮是將檔案變小的過程。我們為什麼需要它?為了節省儲存空間,並讓檔案在網路上傳輸得更快。
破壞性與非破壞性壓縮
- 破壞性壓縮 (Lossy Compression): 永久刪除一些人類眼睛或耳朵不太可能注意到的數據。一旦刪除,就無法恢復。(例子:JPEG, MP3)。
- 非破壞性壓縮 (Lossless Compression): 在不遺失任何原始數據的情況下減小檔案大小。當你解壓縮時,它與原始檔案完全相同。(例子:PNG, ZIP)。
遊程編碼 (Run-Length Encoding, RLE)
RLE 是一種簡單的非破壞性壓縮形式。它尋找連續重複的數據片段,並將其儲存為一個單一數值和一個計數。
例子: 想像一排像素:WWWWWBBRRR
使用 RLE,我們將其儲存為:5W, 2B, 3R
我們剛剛把 10 個字元變成了 6 個!這對於具有大面積相同顏色的簡單影像非常有效。
快速回顧: 當你需要極小的檔案且不介意品質輕微下降時(例如串流影片),使用破壞性壓縮。當數據必須完美無缺時(例如文字文件或程式碼),使用非破壞性壓縮。
重點總結: 壓縮節省空間。破壞性壓縮丟棄數據;非破壞性壓縮透過巧妙的儲存方式保留一切完美細節。