【CRC】CRC推导(二)模二除法

您所在的位置:网站首页 二进制模二除 【CRC】CRC推导(二)模二除法

【CRC】CRC推导(二)模二除法

2024-07-14 11:28| 来源: 网络整理| 查看: 265

在讲模二除法之前,我们先看看按位异或运算。如下即二进制1101b异或1010b的结果为0111b。

按位异或是一种二进制运算,只影响当前位,因此我们可以得出两个简单的定律:交换律和结合律。

A⊕B⊕C=A⊕(B⊕C)

例如: 1⊕0⊕1  与  1⊕1⊕0  及  0⊕1⊕1  的结果是一样的。

以上定律对于后面查表推导有极大的帮助。

模二除法并不是一个传统意义上的除法,它是一种二进制除法,二进制除法操作是bit to bit,你也可以看做是一个不借位的二进制加法或减法,但实际上就是按位异或。

模二除法的除数叫做polynomial,也就是多项式。例如多项式X5+X3+X1+1表示的是二进制101011b。

一般除法都是被除数比除数大,实际使用中,可能会出现被除数比除数小的情况,此时所得的余数永远是被除数本身,这该如何处理?

模二除法要求除数即多项式最高位必须为1,否则无意义。二进制除法的规则是,当被除数当前最高位是1时,除以除数,商为1;否则除以0,商也为0。但实际上由于除法实际上是异或,因此商没有什么意义,余数才是我们想要的。

模二除法校验就是发送方将要发送的二进制数据后面填充N个0,然后除以长度为N+1的二进制数(最高位为1),所得余数即为校验值,余数长度与填充长度一致。将0替换为校验值,与数据一起发送出去。接收方接收到数据后,不做任何填充,直接除以相同的二进制数,若结果为零,则发送的数据没有出错。

如下,我们以传送数据为0xCF(11001111b),多项式为0x12(10010b)为例,结果如下:

实际添加校验码的发送二进制数据 110011111010b,接收后除以多项式,校验码为0,传送数据没有错误。

    

我们再换个长一点的多项式看看。

传送数据仍为0xCF(11001111b),多项式为0x11021(10001000000100001b)为例,结果如下:

 

   

 

我们再传送多字节数据。

传送数据为0xCF16(1100111100010110b),多项式为0x11021(10001000000100001b)为例,结果如下:

 

   

 

从上面几个范例可以看到,模二除法的校验码取的是比多项式少一个最高bit 的余数。发送时把余数添加到发送数据后面,再将数据和校验码同时发送出去,接收端除以相同的多项式,若是余数为0,则表示数据传输未出错。

以下为模二除法的计算方法,实现语言为C#:

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3