學習筆記:資訊表示法 (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 二補數。

  1. 找出正數的二進制:
    +45 的 8-bit 二進制為 0010 1101。
  2. 進行一補數 (One's Complement)(反轉位元):
    將 0 變為 1,1 變為 0。
    0010 1101 變為 1101 0010。
  3. 進行二補數運算(加 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)

編碼點陣圖
  1. 像素數據:每個像素被分配一個二進制代碼,代表其顏色。
  2. 色彩深度 (Colour Depth):用來表示單個像素顏色的位元數。色彩深度越高,可呈現的顏色就越多。
    色彩數量 = \(2^{\text{色彩深度}}\)
    (例如:8 位元 = 256 色;24 位元 = 1670 萬色。)
  3. 圖像解析度:圖像中的像素數量 (寬 x 高)。
  4. 檔案標頭 (Header):包含有關圖像結構的重要資訊(如檔案類型、解析度、色彩深度)。
計算點陣圖檔案大小

檔案大小取決於總像素數與每個像素使用的色彩深度。

公式 (單位為 bit):
$$ \text{檔案大小} = \text{圖像寬度 (像素)} \times \text{圖像高度 (像素)} \times \text{色彩深度 (bits)} $$

若要換算為 bytes,請將結果除以 8。

變更元素之影響
  • 提高解析度:儲存更多像素,導致畫質變好,但檔案大小按比例增加。
  • 提高色彩深度:每個像素使用更多位元,呈現更廣的色彩範圍(品質更高),但檔案大小按比例增加。

圖形:向量圖 (Vector Graphics)

與點陣圖不同,向量圖(如 SVG)不儲存像素數據,而是儲存關於如何繪製圖像的數學指令(繪圖列表)。

  • 繪圖物件:基礎幾何形狀(如圓形、線條、矩形)。
  • 屬性:物件的特徵(如線條粗細、顏色、位置、填色樣式)。
justification:點陣圖 vs 向量圖
特性 點陣圖 (如相片) 向量圖 (如標誌)
縮放 畫質會下降(出現像素化)。 完美縮放(重新計算數學值)。
檔案大小 取決於解析度和色彩深度,複雜照片檔案大。 通常較小,取決於物件的複雜度。
應用場景 相片、含細微陰影的複雜圖像。 標誌、字體、技術圖紙、簡單圖形。

選用技巧:如果圖像需要頻繁縮放而不損失品質(如將公司標誌放在廣告看板與信頭上),則選用向量圖。

聲音表示法

聲音本質上是類比波。為了數位化儲存,我們必須透過取樣 (Sampling) 過程進行轉換。

取樣過程
  1. 類比數位轉換器 (ADC):將連續的類比聲波轉換為數位形式。
  2. 取樣:定時測量聲波的振幅(音量)。
  3. 取樣率 (Sampling Rate/Frequency):每秒取樣的次數(以 Hertz, Hz 為單位)。較高的頻率意味著測量更頻繁,能更準確地捕捉聲波。
  4. 取樣解析度 (Sampling Resolution/Bit Depth):分配給每個樣本儲存振幅值的位元數。解析度越高,可表示的音量細節就越豐富,提升準確度。

類比:想像錄音就像製作定格動畫。取樣率是你每秒拍攝的照片張數,而取樣解析度則是每張照片的細節(色彩深度)。

對檔案大小與準確度的影響

提高取樣率取樣解析度會大幅提升音質(準確度),但儲存聲音所需的總位元數也會增加,導致檔案變大。

1.2 重點總結:點陣圖是像素網格,向量圖是數學指令。聲音品質取決於取樣的頻率(率)與細節(解析度)。

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),效果顯著。
  • 點陣圖:對於大面積純色的簡單圖像效果很好。
  • 向量圖:較不相關,因為向量圖是由數學指令定義的,而非序列像素數據。
  • 聲音檔案:若存在靜音期(長串零振幅樣本),可使用此方法。
1.3 重點複習:

無失真:品質完美,檔案較大 (ZIP)。用於關鍵數據。
失真:品質降低,檔案大幅縮小 (JPEG, MP3)。用於非關鍵多媒體。
RLE:一種無失真方法,透過統計重複值出現的次數來進行編碼。