1、校驗碼概念
校驗碼主要是為了解決計算機各部件進行數據傳輸和交換,確保傳送過程的正確無誤,一是為了提高硬件電路的可靠性,二是提高代碼的校驗能力。通常會用校驗碼來檢查傳送的數據是否正確。
校驗碼編碼分為兩類:合法編碼、錯誤編碼。合理的設計錯誤編碼和編碼規則,可以在數據傳輸的時候發現某種錯誤是就會變成錯誤編碼,從而達到檢驗錯誤的目的。
碼距:指的是一個編碼系統中任意兩個合法編碼之間至少有多少個二進制位不同。
常用的三種校驗碼:奇偶校驗碼、海明碼、循環冗余校驗碼。
2、校驗碼分類
3.1 奇偶校驗碼(Parity Code)
奇偶校驗碼特點如下:
無論數據位多少位,校驗位只有一位
數據位和校驗位一共所含的1個數為奇數,稱為奇校驗
數據位和校驗位一共所含的1個數為偶數,稱為偶校驗
原理:在數據傳輸前,我們會求一次校驗位,傳輸后,會求一次校驗位,那么,在奇偶校驗中,我們通過比較這兩個校驗位是否相同,一般是采用異或的方式,若結果為1,則說明有奇數個錯誤,結果為0,則說明正確或者偶數個錯誤。
常見的奇偶校驗碼 :水平奇偶校驗碼、垂直奇偶校驗碼、水平垂直奇偶校驗碼。
3.2 海明碼(Hamming Code)
設數據位是n位,校驗位是k位,則n和k滿足以下關系:
2^k-1>=n+k
k 常取滿足該關系的最小值。
選擇題公式,可以記住
? ? ? ?? ? ? ?
3個原則
海明碼只能檢測出2位錯,糾1位錯
海明碼默認進行偶校驗(除非特殊說明使用奇校驗)。
海明碼是一串由0和1組成的序列(除01外沒有其他的值)
3.3 循環冗余校驗碼 CRC
循環冗余校驗碼廣泛應用于數據通信領域和磁介質的存儲系統中,它利用生成多項式為k個數據位產生r個校驗位來進行編碼,其編碼長度為k+r。CRC的代碼格式如下:
??? ? ?? ? ? ?
循環冗余校驗碼有兩部分組成:數據為、校驗位。若數據位占k位,則校驗位占n-k位。n為CRC碼的字長。檢驗碼越長校驗能力就會越強。在CRC編碼是,采用的是模2運算,模2運算加減運算的規則是按位運算,不發生借位和進位。