1. 程式人生 > >軟考2019-計算機系統知識(資料校驗碼)

軟考2019-計算機系統知識(資料校驗碼)

計算機中的資料在進行儲存和傳輸的過程中可能會發生錯誤。為了及時發現和舊賬這類錯誤,在資料傳輸過程中要進行校驗,也就是在傳輸的資料中增加資料校驗碼。

資料校驗碼是具有發現某些錯誤或具有自動糾錯能力的資料編碼,最常用的是奇偶校驗碼。

碼距,是指在一個編碼系統中任意兩個合法編碼(碼字)之間不同的二進位制位數。

1.奇偶校驗碼。

只能檢測程式碼中奇數位出錯的編碼,但不能發現偶數位出錯的情況。

奇數+奇數=偶數;偶數+奇數=奇數;偶數+偶數= 偶數。

2.海明碼。

海明碼的校驗碼的位置必須是在2的n次冪位置(n從0開始,分別代表從左邊數起分別是第1、2、4、8、16。。。),資訊碼也就是在非2的n次冪位置

假設資料位為n位,校驗位是k位,則n和k必須滿足以下關係:

2的k次冪>=n+k+1

這裡其實n已經限制了k的取值最大範圍。

假如求資訊1011的海明碼,我們參考上面的圖克制,1,2,4都是校驗位,那麼1011分別排在7,6,5,3上面:

其中I4=1,I3=0,I2=1,I1=1,

那麼r2,r1,r0該怎麼求呢?

I4在第7位可以拆解為 2的2次冪+2的1次冪+2的0次冪

I3在第6位可以拆解為 2的2次冪+2的1次冪

I2在第5位可以拆解為 2的2次冪+2的0次冪

I1在第3位可以拆解為 2的1次冪+2的0次冪

r0的值=I4^I2^I1,為什麼這麼算呢?看看I4拆分成的數中,有沒有包含==該校驗位位數的數,有的話就加入進來,^的意思是異或,相同為0,不同為1,根據這規則

r0=1,

同理r1=I4^I3^I1 結果=0,

r2=I4^I3^I2 結果=0

所以最後的結果為1010101

其實這裡的r0,r1,r2是其中的一種表示方法,還有別的表示方法,如:

R1,R4,R8,包括怎麼校驗,因為這篇只是為準備軟考而做的筆記,就不詳細闡述了。

3.迴圈冗餘檢驗碼(Cyclic Redundancy Check)

例題:採用CRC進行差錯校驗,生成多項式為G(X)=X4次冪+X+1,資訊碼為10111,則計算出的CRC校驗碼為:

步驟:

1.化解多項式 為10011

2.資訊碼加0做模2加運算(不進位加法)(補多少0呢?除數的位數-1)

3.得到的餘數即為校驗碼 (一定比除數少1位,即使前面是0也要帶著)