資料儲存 (Data Storage)

二元世界 (Binary World)

使用原因

  • 二進制系統在計算機硬體層面易於實現,因為它只需要兩種狀態(如電壓高低或磁性方向)來表示數據。
  • 二進制的簡單性使其成為數位系統設計的理想選擇。

二元運算類型

基本算術運算

加法(Addition)

  1011  (11 in decimal)
+ 1101  (13 in decimal)
---------
 11000  (24 in decimal)

0 + 0 = 0  
0 + 1 = 1  
1 + 0 = 1  
1 + 1 = 10(結果是二進制的2,進位1)

減法(Subtraction)

  1101  (13 in decimal)
- 1010  (10 in decimal)
---------
   0011  (3 in decimal)

0 - 0 = 0  
1 - 0 = 1  
1 - 1 = 0  
0 - 1 = 1(需要向前一位借1)

乘法(Multiplication)

   101  (5 in decimal)
×   11  (3 in decimal)
---------
   101   (5)
+ 1010  (10, 左移一位)
---------
  1111  (15 in decimal)

0 × 0 = 0  
0 × 1 = 0  
1 × 0 = 0  
1 × 1 = 1  

除法(Division)

  11010 ÷ 101 = 101 (26 ÷ 5 = 5, remainder = 1)

位元運算

AND

  • 每一位對應的位都必須為1,結果才為1,否則為0。
1010 AND 1100 = 1000

OR

  • 只要有一位是1,結果為1。
1010 OR 1100 = 1110

XOR(Exclusive OR)

  • 當兩位不同時,結果為1,否則為0。
1010 XOR 1100 = 0110

NOT

  • 將每一位取反,0變成1,1變成0。
NOT 1010 = 0101

位元左移與右移運算(Shift Left / Shift Right)

  • 將所有位向左移動,右邊補0,這相當於數字乘以2的冪次方。
1010 >> 1 = 0101

2 的補數(Two's complement)

介紹

2 的補數是一種用來表示有符號整數(正數和負數)的二進制數字系統。它能簡化加減法運算,且不需要特殊的負數運算邏輯。

2 的補數的特點

  • 正數表示與普通二進制相同。
  • 負數表示透過 2 的補數表示,方便統一加減法運算。
  • 只有一個零的表示方法(0000000),無正零或負零之分。

如何求 2 的補數

  1. 對數字逐位取反(1 的補數)。
  2. 對取反後的結果加 1。

範例:
4 位二進制數字 0101(+5),求 -5 的 2 的補數:
取反:0101 → 1010
加 1:1010 + 1 = 1011
所以 -5 表示為 1011。

2 的補數的範圍

  • 在 n 位 2 的補數系統中,數字範圍為 -2^(n-1) 到 2^(n-1) - 1。

範例:8 位

  • 最小值:-128(1000 0000)
  • 最大值:127(0111 1111)

2 的補數表示法的優點

  • 簡化加減法運算,正負數均可用同一種加法處理。
  • 避免符號位複雜處理。
  • 唯一零表示,避免正零負零問題。

4 位的 2 的補數表示法

二進制 十進制
0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1111 -1
1110 -2
1101 -3
1100 -4
1011 -5
1010 -6
1001 -7
1000 -8

加法示例:
計算 2 + (-3)
2 的二進制:0010
-3 的 2 補數:1101
相加結果:1111(-1)


偏移編碼 (Excess)

介紹

Excess(偏移編碼)是用偏置值將有符號數轉換為非負數的一種編碼方式,常用於浮點數的指數表示。

Excess-N 表示法的特點

  • 偏置值 N 會加到實際數字上,確保編碼值皆為非負數。
  • 例如 Excess-127,偏置值為 127,表示範圍為 0~255,實際值為 -127 ~ 128。

如何進行 Excess-N 編碼

  • 編碼:Encoded = x + N
  • 解碼:x = Encoded - N

Excess-127 編碼範例

實際值 編碼值(二進制) 說明
0 01111111 (127) 0 + 127 =127
1 10000000 (128) 1 + 127 =128
10 10001001 (137) 10 +127 =137
-1 01111110 (126) -1 +127=126
-10 01110101 (117) -10 +127=117

應用

  • 浮點數指數部分採用 Excess 表示法(如 IEEE 754 的 Excess-127)
  • 簡化硬體電路設計,避免複雜符號位運算。

Excess 表示法的優點

  • 簡化運算邏輯。
  • 統一使用非負數表示數值,方便比較與處理。
  • 廣泛用於浮點數系統。

Overflow(溢位)

介紹

Overflow 指數值超出計算機所能表示的範圍,導致結果錯誤或異常。

整數溢位(Integer Overflow)

  • 發生在整數加減乘除時,超出可表示範圍。
  • 8 位無符號整數範圍 0 ~ 255,255 + 1 會回繞成 0。
  • 8 位有符號整數範圍 -128 ~ 127,127 + 1 會溢位成 -128。
unsigned char x = 255;
x = x + 1; // 溢位後 x 變成 0

signed char y = 127;
y = y + 1; // 溢位後 y 變成 -128

浮點數溢位(Floating-Point Overflow)

  • 浮點數超出表示範圍會變成無窮大(Infinity)或非數(NaN)。
  • 例如 float 超過約 3.4e38 會溢位。
float x = 1e38;
x = x * 10; // 結果為 Infinity

堆疊溢位(Stack Overflow)

  • 遞迴過深或無窮遞迴時,系統堆疊空間耗盡導致程式崩潰。

Overflow 的後果

  • 運算結果錯誤,可能造成應用邏輯錯亂。
  • 程式異常崩潰。
  • 潛在安全風險,被惡意利用。

應對 Overflow 的方法

  • 事前範圍檢查,避免運算超出限制。
  • 使用更大容量的資料類型(如 64 位整數)。
  • 利用語言或編譯器提供的溢位檢測機制。
  • 捕捉例外並妥善處理。

總結

正反器(Flip-Flop)

介紹

正反器(Flip-Flop)是一種數位電路元件,屬於雙穩態電路,能夠在兩種穩定狀態之間切換,用來存儲一位二進制數(即0或1)。正反器是構成數位記憶體、寄存器、計數器等的基本單元,也是同步電路中非常重要的組件。

正反器的輸入信號會根據時鐘訊號或控制信號的變化來決定輸出信號,並且能夠保留當前狀態,直到接收到新的信號。

SR 正反器(Set-Reset Flip-Flop)

  • 功能:SR 正反器有兩個輸入,S(Set)用來設置輸出為1,R(Reset)用來設置輸出為0。

  • 輸入/輸出規則:

    • 當 S = 1 且 R = 0,輸出為 1。
    • 當 S = 0 且 R = 1,輸出為 0。
    • 當 S = 0 且 R = 0,保持輸出不變。
    • 當 S = 1 且 R = 1,此狀態未定義,通常會被禁止。

真值表:

S R Q (輸出)
0 0 保持
0 1 0
1 0 1
1 1 未定義

JK 正反器

  • 功能:JK 正反器是 SR 正反器的改進版,避免了 S = 1 和 R = 1 這種未定義狀態。在 JK 正反器中,J 相當於 S,K 相當於 R,當 J = 1 且 K = 1 時,輸出會反轉。

  • 輸入/輸出規則:

    • 當 J = 1 且 K = 0,輸出為 1。
    • 當 J = 0 且 K = 1,輸出為 0。
    • 當 J = 1 且 K = 1,輸出反轉。
    • 當 J = 0 且 K = 0,保持輸出不變。

真值表:

J K Q (輸出)
0 0 保持
0 1 0
1 0 1
1 1 反轉

總結

正反器是一種重要的數位電路元件,能存儲和保持二進制狀態,廣泛應用於計算機硬體、記憶體模組和各類數位系統設計中。它是構建同步時序電路的基礎單元。


記憶體(Memory)

介紹

記憶體(Memory)是計算機系統中用來存儲數據和指令的硬體組件,負責儲存計算機運行時需要的數據和程式碼。根據用途和特性,記憶體可以分為多種類型。

隨機存取記憶體(RAM,Random Access Memory)

  • 功能:用於存儲當前運行的程式和數據,是計算機運行時的工作區。

  • 特性:

    • 揮發性:當電源關閉時,儲存在 RAM 中的數據會消失。
    • 速度快:相較於其他類型的儲存裝置,RAM 的讀取和寫入速度非常快。
  • 類型:

    • DRAM(動態隨機存取記憶體):需要定期刷新以維持數據,常用於主記憶體。
    • SRAM(靜態隨機存取記憶體):不需要刷新,速度更快但成本較高,常用於快取記憶體。

快取記憶體(Cache Memory)

  • 功能:用於暫時存儲經常使用的數據和指令,以加快數據訪問速度。

  • 特性:

    • 快取位於處理器和主記憶體之間,提供快速訪問。
    • 通常分為 L1、L2、L3 快取,其中 L1 是速度最快、容量最小的快取,L3 則速度較慢但容量較大。

輔助儲存(Secondary Storage)

  • 功能:用於長期儲存數據和檔案,儲存容量通常大於記憶體。

  • 特性:

    • 非揮發性:即使電源關閉,數據仍然保留。
    • 包括硬碟驅動器(HDD)、固態硬碟(SSD)、USB 隨身碟等。
    • 用途:用來儲存作業系統、應用程式和用戶數據。

記憶體的運作原理

  • 數據儲存:記憶體透過物理結構中設置電壓狀態來表示二進制數字(0 和 1)。

  • 數據存取:CPU 向記憶體發送地址請求後,記憶體返回對應的數據。

記憶體的性能指標

  • 容量:記憶體的存儲能力,通常以字節(Byte)為單位。

  • 速度:數據的讀取和寫入速度,通常以奈秒(ns)或毫秒(ms)為單位。

  • 延遲:從發出存取請求到得到回應的時間。

記憶體的應用

  • 運行程式:記憶體是計算機運行程式的必要組件,程式執行時需要在 RAM 中加載。

  • 數據處理:所有計算都依賴於記憶體來讀取和寫入數據。

  • 多任務處理:多個程式同時運行需足夠的 RAM 來存儲數據和狀態。

總結

記憶體是計算機系統的重要組件,負責暫時和永久地存儲數據。其性能和容量直接影響系統效率,隨著科技進步,記憶體技術不斷提升以滿足更高的數據處理需求。


Buffer(緩衝區)

介紹

Buffer(緩衝區)是一塊臨時的記憶體空間,用來在數據傳輸或處理過程中暫存資料,幫助系統更有效率地管理不同速率的數據流,避免設備速度不匹配產生瓶頸。

Buffer 在硬體與軟體中均廣泛應用,是資料處理中的重要機制。

Buffer 的作用

Buffer 在數據生產者和消費者間起緩衝作用,確保兩者在不同速度下協調工作,例如:

  • 當數據生產速度快於消費速度時,Buffer 暫存多餘數據等待消費者讀取。

  • 當消費速度快於生產速度時,Buffer 仍可保持數據供消費者持續讀取。

Buffer 的應用場景

  1. 資料傳輸

    • 網路傳輸:暫存接收或待發送數據,應對不穩定網路或速率差異。
    • I/O 操作:協調處理器與硬碟、打印機等設備的速度差。
  2. 影像與音訊播放

    • 串流影音時提前緩存數據,確保播放流暢,避免中斷。
  3. 數據處理

    • 大型數據系統或演算法中暫存數據塊,提升批量處理效率。
  4. 雙緩衝技術

    • 圖形渲染中用雙 Buffer 交換畫面,減少閃爍並提供平滑更新。

Buffer 的工作原理

Buffer 多採 FIFO(先進先出)原則:

  • 寫入 Buffer:數據先寫入 Buffer。

  • 從 Buffer 讀取:消費者按序讀取,確保數據流連續穩定。

Buffer 與 Cache 的區別

  • Buffer:用於暫存數據,協調速度差,數據多為一次性使用。

  • Cache:用於存放經常使用的數據,加速存取,數據可能重複使用。

Buffer 的特性

  • 暫時性:短期存儲,數據消費後即釋放。

  • 順序性:數據按進入順序輸出。

  • 大小固定:容量有限,滿時需等待或丟棄舊數據。

總結

Buffer 是臨時存儲區,協調生產者與消費者速率,保證數據流平穩。廣泛應用於網路通信、I/O 操作與多媒體播放等場景。


資料壓縮(Data Compression)

介紹

資料壓縮是透過減少數據存儲或傳輸大小來提升效率的技術。透過移除冗餘資訊減少資料空間,壓縮資料可經解壓還原(無損)或近似還原(有損)。

無損壓縮(Lossless Compression)

  • 壓縮後資料可完全還原無資訊遺失,適用需保持數據完整的場景。

  • 常見演算法:

    • Huffman 編碼:根據符號頻率分配可變長編碼,頻率高者編碼短。
    • Lempel-Ziv-Welch (LZW):用短代碼替換重複字串。
    • Deflate:結合 LZ77 和霍夫曼編碼,用於 ZIP、PNG。
    • Run-Length Encoding (RLE):連續重複資料壓縮為值和次數。

Huffman 編碼

Huffman 編碼基於符號出現頻率設計編碼:

  1. 統計符號頻率。

  2. 建立 Huffman 樹:頻率最低兩節點合併成新節點,重複直至成樹。

  3. 分配編碼:左分支為 0,右分支為 1,頻率高的符號編碼短。

  4. 使用編碼替換原資料生成壓縮資料。

示意例子:


字母及頻率:
A:45, B:16, C:5, D:9

建樹過程:
C(5) + D(9) = 14
14 + B(16) = 30
30 + A(45) = 75

編碼分配:
A: 0
B: 10
D: 110
C: 111

壓縮資料 "AABABCBABDD":
轉為 001001011110010110110

優點

  • 高效壓縮,適合符號頻率差異大的資料。

  • 無損,可完全還原。

  • 實現較簡單,適用範圍廣。

缺點

  • 靜態編碼需先統計全資料頻率,實時應用較慢。

  • 編碼長度不固定,解碼需特殊樹結構,增加複雜度。

應用

  • ZIP、GZIP 等文件壓縮格式。

  • PNG 圖像壓縮(Deflate 包含 Huffman)。

  • 其他壓縮技術基礎。

有損壓縮(Lossy Compression)

  • 壓縮過程中丟失部分資訊,達更高壓縮比,適用影音等對完整性要求不高的場合。

  • 常見演算法:

    • JPEG(圖像壓縮):刪除不易察覺細節。
    • MP3(音訊壓縮):去除不可聞頻率音訊。
    • MPEG(影片壓縮):去除重複畫面及不可見細節。

資料壓縮目標

  • 減少存儲空間。

  • 加快傳輸速度。

  • 節省網路頻寬。

常見壓縮格式

  • 文件:ZIP、RAR、7z(無損壓縮)

  • 影像:JPEG(有損)、PNG(無損)

  • 音訊:MP3(有損)、FLAC(無損)

  • 影片:MPEG-4、H.264(有損)

無損與有損壓縮的選擇

  • 無損適合需完整還原數據的場合。

  • 有損適合多媒體文件,能在維持感知品質下大幅減小檔案。

壓縮比

壓縮比 = 壓縮前大小 ÷ 壓縮後大小,數值越大代表壓縮效果越好。

總結

資料壓縮透過移除冗餘資訊減少大小,提升存儲與傳輸效率。根據需求選擇無損或有損方法,無損適合精確數據,有損適合多媒體應用。