學習筆記:資訊表示法 (AS Level 9618)
各位未來的電腦科學家,大家好!歡迎來到電腦運作原理的基礎殿堂。本章節資訊表示法 (Information Representation) 至關重要,因為你所見到的一切——文字、圖像、聲音、程式——在電腦能處理之前,都必須先轉換為二進制數據 (Binary data)(即 0 與 1 的序列)。
別擔心,如果數字不是你的強項也沒關係。我們將會把複雜的轉換過程與概念拆解成簡單易懂的步驟,並輔以大量的實例!讓我們一起深入了解電腦的語言吧。
1.1 數據表示法
二進制數量級:Kibi 與 Kilo
在電腦科學中,我們經常處理大量的數據,因此會使用 Kilobyte、Megabyte 和 Gigabyte 等前綴詞。然而,這些前綴詞有兩套截然不同的標準:十進制 (Decimal/SI) 與 二進制 (Binary/IEC)。
十進制前綴 (Kilo, Mega, Giga, Tera)
- 基於 10 的冪次方。
- Kilo (k): \(10^3 = 1000\)
- Mega (M): \(10^6 = 1,000,000\)
- Giga (G): \(10^9 = 1,000,000,000\)
- Tera (T): \(10^{12} = 1,000,000,000,000\)
- 例子:1 公里 (Kilometre) 等於 1000 米。
二進制前綴 (Kibi, Mebi, Gibi, Tebi)
- 電腦偏好使用 2 的冪次方(因為它們使用二進制)。這些前綴用於描述電腦記憶體與儲存容量,儘管業界常誤用 SI 前綴。
- Kibi (Ki): \(2^{10} = 1024\) (Kibibyte)
- Mebi (Mi): \(2^{20} = 1,048,576\) (Mebibyte)
- Gibi (Gi): \(2^{30}\) (Gibibyte)
- Tebi (Ti): \(2^{40}\) (Tebibyte)
關鍵差異:當你在市場行銷中看到 'kilo' 或 'mega' 時(如硬碟容量),通常指的是十進制系統(10 的冪次方)。但在程式設計中計算記憶體位址或檔案實際大小時,二進制系統(2 的冪次方,即 1024)才是正確的標準。
請務必記住差別:kilo 是 1000,kibi 是 1024。其中的 'i' 代表 'binary'(二進制)。
數制與轉換
電腦依賴不同的進位制。你必須具備在這些進位制之間轉換整數的能力。
十進制 (Denary, Base 10)
我們日常生活使用的數字系統,包含 10 個數字 (0–9)。
二進制 (Binary, Base 2)
電腦的原生語言,僅使用兩個數字 (0 與 1)。每一個數字稱為一個位元 (bit)。
十六進制 (Hexadecimal, Base 16)
使用 16 個字符 (0–9 及 A–F)。由於 4 個 bit 可以精確轉換為 1 個十六進制數字,它常被用作二進制的簡寫,讓人類更容易閱讀和除錯長串的二進制代碼。
步驟說明:十進制轉二進制(及十六進制)
將十進制數字 156 轉換為 8-bit 二進制,再轉換為十六進制。
步驟 1:設置權值(2 的冪次方):
\(128 \quad 64 \quad 32 \quad 16 \quad 8 \quad 4 \quad 2 \quad 1\)
步驟 2:找出能放入 156 的最大權值:
\(156 - 128 = 28\)。所以,128 位元為 ON (1)。
步驟 3:繼續處理餘數 (28):
64 (太大,為 0)。32 (太大,為 0)。16 (可放入:\(28 - 16 = 12\))。所以,16 位元為 ON (1)。
步驟 4:繼續處理餘數 (12):
8 (可放入:\(12 - 8 = 4\))。所以,8 位元為 ON (1)。
4 (可放入:\(4 - 4 = 0\))。所以,4 位元為 ON (1)。
2 (0)。1 (0)。
結果 (二進制): \(1 \quad 0 \quad 0 \quad 1 \quad 1 \quad 1 \quad 0 \quad 0\)
步驟 5:將二進制轉為十六進制:
將 8 個位元分為兩個半字節 (nibble,各 4 位元):
第一組:1001 (權值:8+1 = 9)
第二組:1100 (權值:8+4 = 12,十六進制對應為 C)
結果 (十六進制): 9C
小知識:十六進制通常會在數字前加上井號 (#) 或符號 (&),例如 #9C 或 &9C,在程式設計中也常寫為 0x9C。
二進制編碼十進制 (BCD)
BCD 是另一種使用二進制來表示十進制數字的方法,主要用於顯示器及簡單的算術電路。在 BCD 中,每個十進制位數分別由一個 4-bit 的二進制代碼表示。
例子:十進制 156 的 BCD 表示:
1 變成 0001
5 變成 0101
6 變成 0110
結果 (BCD): 0001 0101 0110 (總共 12 位元)。
BCD 的空間效率較低(156 在純二進制中僅需 8 位元),但非常適合數位時鐘或計算機等直接顯示數字的應用。
表示負整數:二補數 (Two's Complement)
電腦如何儲存負號?它使用二補數系統。此系統能讓我們一致地表示正數與負數,並使二進制減法變得簡單(實際上變成了加法!)。
最左邊的位元(即最高有效位元,MSB)被用作符號位元 (Sign Bit):
- 若 MSB 為 0,數字為正數。
- 若 MSB 為 1,數字為負數。
步驟說明:正十進制轉負二補數
將 -45 轉換為 8-bit 二補數。
- 找出正數的二進制:
+45 的 8-bit 二進制為 0010 1101。 - 進行一補數 (One's Complement)(反轉位元):
將 0 變為 1,1 變為 0。
0010 1101 變為 1101 0010。 - 進行二補數運算(加 1):
\(1101\ 0010 + 1 = 1101\ 0011\)
結果: -45 的 8-bit 二補數為 1101 0011。注意 MSB 為 1,代表負數。
二進制加法與減法
二進制加法遵循簡單規則:
- \(0 + 0 = 0\) (進位 0)
- \(0 + 1 = 1\) (進位 0)
- \(1 + 1 = 0\) (進位 1)
- \(1 + 1 + 1 = 1\) (進位 1)
二進制減法:電腦透過二補數執行減法。要計算 A - B,電腦只需計算 A + (-B),其中 -B 是以二補數形式表示。
了解溢位 (Overflow)
當算術運算結果過大(或過小),導致無法儲存在分配的位元數(例如 8 位元)內時,就會發生溢位 (Overflow)。
例子:如果使用 8 位元二補數,最大正值為 +127 (0111 1111)。如果將 127 加 1,結果 (128) 會導致 MSB 變為 1 (1000 0000)。由於 MSB 現在是 1,電腦會將其解釋為負數(在二補數中為 -128),從而引發溢位錯誤。
字元集 (ASCII 與 Unicode)
文字字元 (A, b, !, 5) 也必須儲存為二進制。字元集 (Character set) 是一種標準化映射系統,為每個字元分配唯一的二進制代碼。
- ASCII:原始標準,使用 7 位元,提供 128 個字元 (0 至 127),涵蓋了英文大小寫字母、數字及基本符號。
- 擴展 ASCII (Extended ASCII):使用 8 位元,提供 256 個字元 (0 至 255),包含了更多地區性字元與圖形符號。
- Unicode:現代標準,使用 16、24 或 32 位元,容納數百萬個唯一字元。這對於全球化文字顯示至關重要,涵蓋所有語言、表情符號及數學符號。
1.1 重點總結:數據即原始的二進制。我們使用十六進制來提高人類工作效率,使用二補數處理帶正負號的整數,並使用特定的字元集(如 Unicode)將原始位元映射為具意義的符號。
1.2 多媒體表示法
多媒體數據(圖片與聲音)相當複雜,必須從真實世界的類比 (Analogue) 形式轉換為數位 (Digital)(離散的二進制)數據。
圖形:點陣圖 (Bitmapped Images)
點陣圖 (Bitmap)(如 JPEG 或 PNG)是由個別彩色點組成的網格,這些點稱為像素 (pixels)。
編碼點陣圖
- 像素數據:每個像素被分配一個二進制代碼,代表其顏色。
- 色彩深度 (Colour Depth):用來表示單個像素顏色的位元數。色彩深度越高,可呈現的顏色就越多。
色彩數量 = \(2^{\text{色彩深度}}\)
(例如:8 位元 = 256 色;24 位元 = 1670 萬色。) - 圖像解析度:圖像中的像素數量 (寬 x 高)。
- 檔案標頭 (Header):包含有關圖像結構的重要資訊(如檔案類型、解析度、色彩深度)。
計算點陣圖檔案大小
檔案大小取決於總像素數與每個像素使用的色彩深度。
公式 (單位為 bit):
$$
\text{檔案大小} = \text{圖像寬度 (像素)} \times \text{圖像高度 (像素)} \times \text{色彩深度 (bits)}
$$
若要換算為 bytes,請將結果除以 8。
變更元素之影響
- 提高解析度:儲存更多像素,導致畫質變好,但檔案大小按比例增加。
- 提高色彩深度:每個像素使用更多位元,呈現更廣的色彩範圍(品質更高),但檔案大小按比例增加。
圖形:向量圖 (Vector Graphics)
與點陣圖不同,向量圖(如 SVG)不儲存像素數據,而是儲存關於如何繪製圖像的數學指令(繪圖列表)。
- 繪圖物件:基礎幾何形狀(如圓形、線條、矩形)。
- 屬性:物件的特徵(如線條粗細、顏色、位置、填色樣式)。
justification:點陣圖 vs 向量圖
| 特性 | 點陣圖 (如相片) | 向量圖 (如標誌) |
|---|---|---|
| 縮放 | 畫質會下降(出現像素化)。 | 完美縮放(重新計算數學值)。 |
| 檔案大小 | 取決於解析度和色彩深度,複雜照片檔案大。 | 通常較小,取決於物件的複雜度。 |
| 應用場景 | 相片、含細微陰影的複雜圖像。 | 標誌、字體、技術圖紙、簡單圖形。 |
選用技巧:如果圖像需要頻繁縮放而不損失品質(如將公司標誌放在廣告看板與信頭上),則選用向量圖。
聲音表示法
聲音本質上是類比波。為了數位化儲存,我們必須透過取樣 (Sampling) 過程進行轉換。
取樣過程
- 類比數位轉換器 (ADC):將連續的類比聲波轉換為數位形式。
- 取樣:定時測量聲波的振幅(音量)。
- 取樣率 (Sampling Rate/Frequency):每秒取樣的次數(以 Hertz, Hz 為單位)。較高的頻率意味著測量更頻繁,能更準確地捕捉聲波。
- 取樣解析度 (Sampling Resolution/Bit Depth):分配給每個樣本儲存振幅值的位元數。解析度越高,可表示的音量細節就越豐富,提升準確度。
類比:想像錄音就像製作定格動畫。取樣率是你每秒拍攝的照片張數,而取樣解析度則是每張照片的細節(色彩深度)。
對檔案大小與準確度的影響
提高取樣率或取樣解析度會大幅提升音質(準確度),但儲存聲音所需的總位元數也會增加,導致檔案變大。
1.3 壓縮 (Compression)
數據壓縮至關重要,因為現代檔案(特別是多媒體)極為龐大。壓縮可縮小檔案體積,從而節省儲存空間並縮短網路傳輸時間。
失真壓縮 vs 無失真壓縮
主要有兩種類型的壓縮,理解其差異對於選擇合適的壓縮方式非常重要。
1. 無失真壓縮 (Lossless Compression)
- 定義:原始數據可以從壓縮後的檔案完美重現,資訊不會永久丟失。
- 用途:用於每個位元都至關重要的檔案,如文字文件、可執行程式、醫療影像。
- 例子:ZIP, PNG, GIF, 遊程編碼 (RLE)。
- 缺點:壓縮率通常較低(檔案仍然相對較大)。
2. 失真壓縮 (Lossy Compression)
- 定義:壓縮過程中會永久捨棄部分不可逆數據。這些數據通常是人眼或人耳較難察覺的部分。
- 用途:用於對品質細微下降可接受,但需大幅縮小檔案的多媒體檔案。
- 例子:JPEG (圖片), MP3 (音訊), MPEG (視訊)。
- 缺點:永久性的畫質或音質退化。
justification 例子:若你要發送一份科學數據檔案,必須使用無失真壓縮以維持資料完整性。若你是在社群媒體上傳相片,失真壓縮 (JPEG) 是可以接受的,因為檔案大小比細微細節更重要。
壓縮方法:遊程編碼 (Run-Length Encoding, RLE)
RLE 是一種簡單且常見的無失真壓縮形式,對於含有長串重複數值(即數據冗餘)的資料特別有效。它的原理是記錄數值及其連續出現的次數(即「遊程」)。
RLE 如何運作(文字例子)
想像一串文字或簡單的黑白點陣圖行:
原始數據: WWWWWWWBBBWWRRRR
RLE 編碼:我們將其編碼為 (數量, 數值):
\((7, W), (3, B), (2, W), (4, R)\)
應用於不同檔案類型:
- 文字檔案:若含有長串相同字元(如大量空格或 Tab),效果顯著。
- 點陣圖:對於大面積純色的簡單圖像效果很好。
- 向量圖:較不相關,因為向量圖是由數學指令定義的,而非序列像素數據。
- 聲音檔案:若存在靜音期(長串零振幅樣本),可使用此方法。
無失真:品質完美,檔案較大 (ZIP)。用於關鍵數據。
失真:品質降低,檔案大幅縮小 (JPEG, MP3)。用於非關鍵多媒體。
RLE:一種無失真方法,透過統計重複值出現的次數來進行編碼。