类型2在谈除法之前,让我们先看一下按位异或运算。 也就是说,二进制数1101b异或1010b的结果为0111b。
通过相位差或一种二进制运算,只影响现在的位置,所以可以得到两个简单的法则。 交换律和结合律。
a (BC )=a (c ) ) (b (c ) ) ) ) ) ) ) ) ) ) ) ) b ) ) ) ) ) ) b ) c ) ) ) ) ) b ) 652
例如,1 <0> 1和1 <1> 0和0 <1> 1的结果是相同的。
以上规律对以后查表引导非常有用。
模子的除法不是传统意义上的除法。 二进制除法。 二进制除法操作为bit to bit。 也可以看作是不借用位数的二进制数的加法和减法,但实际上是逐位的异或。
二除法的除数称为polynomial,即多项式。 例如,多项式X5 X3 X1 1表示二进制101011b。
一般来说,被除数比除数大,但在实际使用中被除数可能比除数小。 此时得到的馀数总是被除数本身。 我该怎么处理这个呢?
2除法必须是除数,即多项式的最高位为1,否则没有意义。 二进制除法的规则是,如果被除数的当前最高有效位为1,则除以除数后商为1。否则,商也为0。 但是,实际上除法是异或,所以对商品来说意义不大,我想要的是太多。
模除法检验是指,在发送方发送的二进制数据之后填入n个0,除以长度为N 1的二进制数(最高位为1 )的馀数为检验值,天真的音调与填充长度一致。 将0替换为检查值,并与数据一起发送。 接收方在接收到数据后,不进行任何填充,直接除以相同的二进制,如果结果为零,则发送的数据没有错误。
如下所示,发送数据为0xcf(11001111b )、多项式为0x12 ) 10010b )时,结果如下所示。
实际追加了校验码的发送二进制数据110011111010b被接收后多项式除,校验码为0,发送数据没有错误。
试着换一个长一点的多项式。
传输数据为0xcf(11001111b )、多项式为0x11021 ) 100010000001b )时,结果如下所示。
我们再发送多字节的数据。
以传输数据为0xcf16(110011100010110b )、多项式为0x11021 ) 100010000001001b )为例,结果如下所示。
从上面的几个例子可以看出,模式2除法的校验码比多项式少取一个最高位的余数。 发送时,在发送数据的后面添加余数,同时发送数据和校验码。 接收方用同一多项式除,如果馀数为0,则表示数据传输没有错误。
以下是模式2除法的计算方法,实现语言为C# :
上篇【CRC】CRC导出(一) CRC简介下一篇【CRC】CRC导出)三)字节校验表和半字节校验表