同位位元(英語:Parity bit)或核對位元(check bit)是一個表示給定位數的二進制數中1的個數是奇數還是偶數的二進制數。同位位元是最簡單的錯誤檢測碼。
7位數據 (1的個數) |
帶有核對位元的位元組 | |
---|---|---|
偶核對位元 | 奇核對位元 | |
0000000(0) | 00000000 | 00000001 |
1010001(3) | 10100011 | 10100010 |
1101001(4) | 11010010 | 11010011 |
1111111(7) | 11111111 | 11111110 |
此條目沒有列出任何參考或來源。 (2013年10月15日) |
類型
同位位元有兩種類型:偶核對位元與奇核對位元。
以偶核對位元來說,如果一組給定數據位中1的個數是奇數,補一個bit為1,使得總的1的個數是偶數。例:0000001, 補一個bit為1, 00000011。
以奇核對位元來說,如果給定一組數據位中1的個數是奇數,補一個bit為0,使得總的1的個數是奇數。例:0000001, 補一個bit為0, 00000010。
錯誤檢測
如果傳輸過程中包括校驗位在內的奇數個數據位發生改變,那麼奇偶校驗位將出錯表示傳輸過程有錯誤發生。因此,奇偶校驗位是一種錯誤檢測碼,但是由於沒有辦法確定哪一位出錯,所以它不能進行錯誤校正。發生錯誤時必須扔掉全部的數據,然後從頭開始傳輸數據。在雜訊很多的媒介上成功傳輸數據可能要花費很長的時間,甚至根本無法實現。但是奇偶校驗位也有它的優點,它是使用一位數據能夠達到的最好的校驗碼,並且它僅僅需要一些異或門就能夠生成。參見漢明碼中關於其它錯誤校正碼的描述。
使用
由於它很簡單,所以同位位元用於許多電腦硬件中,遇到麻煩時能夠重新操作或者通過簡單的錯誤檢測就能起到很大作用的場合。例如SCSI匯流排使用同位位元檢測傳輸錯誤,許多微處理器的指令高速緩衝記憶體中也包括同位位元保護。因為指令快取數據是主主記憶體數據的副本,所以在發現錯誤的時候能夠拋棄錯誤數據並且重新取回數據。
在序列通訊中,常用的格式是7個數據位、1個核對位元、1到2個停止位。這種格式用方便的8位元位元組巧妙地適應了所有的7位ASCII字元。也可以用其它的格式表示,8位元數據加上1個核對位元可以傳輸任意的8位元位元組數據。
在序列通訊中,同位位元通常是由UART這樣的介面硬件生成、核對的,在接收方,通過介面硬件中的暫存器的狀態位傳給CPU以及作業系統。錯誤數據的恢復通常是通過重新傳送數據,這個過程通常由如作業系統輸入輸出程式這樣的軟件處理的。
一些容錯式磁碟陣列(RAID)使用同位塊實現冗餘。如果陣列中的一塊磁碟出現故障,工作磁碟中的數據塊與同位塊一起來重建遺失的數據。
下面的圖表每列表示一個磁碟,假設A1 = 00000111、A2 = 00000101以及A3 = 00000000。A1、A2、A3 異或得到的Ap等於00000010。如果第二個磁碟出現故障,A2將不能被訪問,但是可以通過A1、A3與Ap的異或進行重建:
A1 XOR A3 XOR Ap = 00000101
冗餘磁碟陣列 A1 A2 A3 Ap B1 B2 Bp C1 C2 C3 C4 Cp