什麼是奇偶校驗?(Parity Bit)
什麼是奇偶校驗?(Parity Bit)
歡迎你點入本篇文章,會促成我想做這篇的原因,主要是因為在上計概時,突然浮現很多靈感,跟一大堆的問題(教授,為什麼要講的這麼淺白呢?我想知道更多啊啊!),為了一次解決我所有的困惑,於是製作本篇文章。
若文章有任何疑點及錯誤的地方歡迎提出。
Parity Bit
Parity bit(同位位元 or 奇偶校驗位)為最簡單且廣泛使用的錯誤檢測方法,透過在資料中增加一個額外的位元來檢測傳輸或儲存過程中是否發生錯誤。這個概念在現代計算機系統與串列通訊中扮演著重要的角色。
From Wikibooks : https://zh.wikibooks.org/zh-tw/%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%B3%BB%E7%BB%9F/%E5%A5%87%E5%81%B6%E6%A0%A1%E9%AA%8C
原理
做奇偶校驗前先計算二進位中 1 的個數,在 1 byte 中,通常有 7 bits 用於實際資料,第 8 個 bit 用來當作檢查位(或稱校驗位)。檢查位的值會根據其他 7 個 bits 中「1」的個數來決定,使整個 byte 中 1 的總數保持為奇數或偶數。
也就是說如果要做偶校驗,假設這 1 byte 的資料裡面 1 的數量有 5 個,由於是做偶校驗,所以要在檢查位改成 1,讓他變成偶數的,反之。
偶校驗(Even parity)
就是要讓整個二進位資料的 1 的個數變成偶數個。
- 如果資料位元中「1」的個數是奇數,檢查位設為「1」。
- 如果資料位元中「1」的個數是偶數,檢查位設為「0」。
範例:對 $(1100001)_2$ 二進位數字做偶校驗(even parity)。
觀察這個資料它是 7 bits 的二進位資料,而且 1 的個數只有三個,然後又要做偶校驗,因此在第 8 個 bit 中加上 1,就是最後一個位元,因而得到 $(11000011)_2$ ,那個檢查位在最右邊的位元。
奇校驗(Odd parity)
跟偶校驗相反,這要讓 1 的個數變成奇數個。
- 如果資料位元中「1」的個數是偶數,校驗位設為「1」。
- 如果資料位元中「1」的個數是奇數,校驗位設為「0」。
沿用上面範例,得到的結果就是 $(11000010)_2$ 。
為什麼要用到 Parity Bit
因為它可以用到以下幾個領域:
- 序列通訊(Serial communication)如 UART
- 記憶體系統
- RAID系統
另外常聽到的 ECC(Error Checking and Correcting,錯誤檢查與糾正)、CRC(Cyclic Redundancy Check,循環冗餘校驗)技術,也都是基於 Parity Bit 的,不過除了 CRC,因為 Parity Bit 算是 CRC 的一種特例。
ECC 比較常用於伺服器記憶體中,以下就比較 Parity Bit 跟 ECC 記憶體的主要差別:
- Parity 記憶體:只能發現錯誤,系統會當機或重新啟動。
- ECC 記憶體:能發現錯誤並自動糾正,系統可以繼續正常運作。
然後 CRC 的應用也蠻多廣的:
- 網路封包傳輸(Ethernet)。
- 檔案完整性驗證。
- 儲存裝置(硬碟、SSD)。
- Modbus 等工業通訊協定。
總之,Parity Bit 就是上述這些東西的基礎!
Parity Bit 優缺點
優點:
- 實作簡單:只需要基本的 XOR 運算即可實現。
- 資源需求低:僅需一個額外位元,運算成本極低。
- 硬體友善:容易在硬體層級實現,適用於資源受限的系統。
缺點:
- 檢測能力有限:只能檢測奇數個位元的錯誤,無法檢測偶數個位元的同時錯誤。
- 無法糾錯:只能發現錯誤,無法確定錯誤位置或進行自動修正。
- 檢錯率50%:理論上只有 50% 的錯誤檢測率。
發生 2 個 bit 的錯誤率小於 1%,奇偶校驗(Parity Bit)在多數情況還是有用處的,但在高精密設備上,可能需要採用更先進的錯誤更正碼(如漢明碼:Hamming Code,就是 ECC 最常見的實作方法)。





