多位二进制模2除法也类似于普通意义上的多位二进制除法,但是在如何确定商的问题上两者采用不同的规则。后者按带借位的二进制除法,根 据余数减除数够减与否确定商1还是商0,若够减则商1,否则商0。多位模2除法采用模2减法,不带借位的二进制减法,因此考虑余数够减除数与否是没有意义 的。实际上,在CRC运算中,总能保证除数的首位为1,则模2除法运算的商是由余数首位与除数首位的模2除法运算结果确定。因为除数首位总是1,按照模2 除法运算法则,那么余数首位是1就商1,是0就商0。[1]
模2除法它既不向上位借位,也不比较除数和被除数的相同位数值的大小,只要以相同位数进行相除即可。模2加法运算为:1+1=0,0+1=1,0+0=0,无进位,也无借位;模2减法运算为:1-1=0,0-1=1,1-0=1,0-0=0,也无进位,无借位。相当于二进制中的逻辑异或运算。也就是比较后,两者对应位相同则结果为“0”,不同则结果为“1”。如100101除以1110,结果得到商为110,余数为1。[2]
在下面的示例中,当余数位数与除数位数相同时,才进行异或运算,余数首位是1,商就是1,余数首位是0,商就是0。当已经除了几位后,余数位数小于除数,商0,余数往右补一位,位数仍比除数少,则继续商0,当余数位数和除数位数一样时,商1,进行异或运算,得新的余数,以此至被除数最后一位。
1111000除以1101:
公式
被校验的数据M(x)=1000,其选择生成多项式为G(x)=x^3+x+1,该数据的循环冗余校验和应为多少?
G(x)=x^3+x+1对应的二进制数为1011,且G(x)中含3个项式,生成多项式为4位二进制,由CRC规则应该取(4-1)=3位(校验和),所以可以预加上3位得到1000B*2^3=1000 000B;
1000 000B(被除数)对1011(除数)做模2除法,得到的余数便是101B(即CRC校验和),所以该数据的循环冗余校验后的数据应为1000 B+101B=1000101B。
想知道模2除法,只需要知道什么是异或运算就很容易算出。
计算机中,异或逻辑表示为: (记忆方法:同为0异为1)
1^1=0
0^0=0
1^0=1
0^1=1
模2除法与普通除法不同,它不向上位借位。对比如图《与普通除法的区别》所示:
与普通除法的区别