模2演算法
① 什麼是模2運算
模2運算是一種二進制演算法,CRC校驗技術中的核心部分,因此,我們在分析CRC演算法之前,必須掌握模2運算的規則。與四則運算相同,模2運算也包括模2加、模2減、模2乘、模2除四種二進制運算。而且,模2運算也使用與四則運算相同的運算符,即「+」表示模2加,「-」表示模2減,「×」或「·」表示模2乘,「÷」或「/」表示模2除。與四則運算不同的是模2運算不考慮進位和借位,即模2加法是不帶進位的二進制加法運算,模2減法是不帶借位的二進制減法運算。這樣,兩個二進制位相運算時,這兩個位的值就能確定運算結果,不受前一次運算的影響,也不對下一次造成影響。
② 模2除法的運算過程是怎麼樣的
被除數÷除數(4位二進制),從被除數高位起,取4位,>除數,商記為1;<除數,記為0。
怎麼會4個O。因為上一位除數與被除數相等,相減差為3個0,本次除從被除數上拖1位下來,該位正好是0。
供參考
③ 什麼叫按位模2加運算啊
所謂模2加,就是相加後達到2就進位,但只保留一位。比如0+0=0不必進位,所以保留為0。0+1=1不必進位,保留為1。1+1=10,保留為0。這種效果也就是按位異或運算(進行運算的兩位相同位結果為0,不同結果為1)。
④ 請教模2除法,模2加法,模2減法的具體推算步驟。
1、加法,模二加的運演算法則是:
0+0=00 + 1 = 1 1+ 0 = 1 1+ 1 = 0
理解:兩個二進制數相加不考慮進位,例如01 + 11 = 10,對於兩個數的低位都是1,進行模二和為0,但是沒有進位,所以高位的0 加1 還是1,因為不考慮低位的進位。
2、減法,模二減的運演算法則:
0 - 0 = 0 0 - 1 = 1 1 - 0 = 1 1 - 1 = 0
例: 1 0 1 0
- 0 1 1 0
---------------------
1 1 0 0
上式的減法中,第三位的減法中0-1,如果按照二進制的減法是有借位的,但是對於模二減是沒有借位的,所以才會有第四位中的1-0仍然為1。
細心的同學會發現,其實兩個數的「模二加」和「模二減」的結果都是一樣的,也就是我們說的「異或」,各位親,你們說是不是?
3、乘法,模二乘的運演算法則:
0 * 0 = 0 0 * 1 = 0 1 * 0 = 0 1 * 1 = 1
例如:1011
X111
---------------
1011
1011
1011
-------------------
110001
模二乘與一般二進制乘法的區別是在於下面的加法部分,模二乘的加法部分依然是模二加的法則
4、除法,模二除運演算法則:
模2除法運算定義為:
0÷1=0 1÷1=1
多 位二進制模2除法也類似於普通意義上的多位二進制除法,但是在如何確 定商的問題上兩者採用不同的規則。後者按帶借位的二進制減法,根
據余數減除數夠減與否確定商1還是商0,若夠減則商1,否則商0。多位模2除法採用模2減法,不帶借位的二進制減法,因此考慮余數夠減除數與否是沒有意義
的。實際上,在CRC運算中,總能保證除數的首位為1,則模2除法運算的商是由余數首位與除數首位的模2除法運算結果確定。因為除數首位總是1,按照模2
除法運演算法則,那麼余數首位是1就商1,是0就商0。例如1100100÷1011=1110……110,列豎式計算:
模二除法
⑤ crc里的模二演算法
是把整個所有位元組看成一組二進制來除,
而且按道理應該一個位一個位的除,
但是由於這個除法具有一些規律,也能一次計算多個位(暢暢扳堆殖瞪幫缺爆畫比如8個位),
這樣你看到的最後計算就是每次都是處理的一個位元組.
另外,實際的crc計算還有一些問題要考慮
(1)任何長度的全0串,crc的結果都是0,
這意味者如果數據最前面被增加或者減少了0,crc無法檢測出來,
為了解決這個問題,一般crc計算會直接指定一個初始值,就是相當於在最前面加了個非0的前綴,這樣就能檢測出這種情況.
(2)一般crc的結果是作為附加數據放在原來數據的末尾,
這種情況下,
如果直接把這個附加了crc的數據做crc計算,會得到0,
這時候也會有(1)的類似問題,
如果直接用拉通的crc是否為0來判斷,
則在最後可能會有多餘的0,
無法檢測出來.
因而有的crc規定最後的crc要做一個變換(比如取反)然後再加在結尾,
這樣就不可以用拉通crc為0來檢查了.