深入浅出CRC——模2运算

2019-04-13 11:50发布

主题词:CRC算法原理;CRC校验;模2运算(模二运算);mod 2运算

CRC校验算法采用一种称为“模2运算”的二进制运算法则。模2运算是CRC运算的核心部分,因此,在分析CRC算法前,应先了解一下模2运算。

与四则运算相同,模2运算也包括模2加、模2减、模2乘、模2除四种二进制运算。而且,模2运算也使用与四则运算相同的运算符,即“+”表示模2加,“-”表示模2减,“×”或“·”表示模2乘,“÷”或“/”表示模2除。与四则运算不同的是模2运算不考虑进位和借位,即模2加法是不带进位的二进制加法运算,模2减法是不带借位的二进制减法运算。这样,两个二进制位相运算时,这两个位的值就能确定运算结果,不受前一次运算的影响,也不对下一次造成影响。

①模2加法运算定义为:
0
00        0+1=1        1+0=1        1+1=0
例如0101+0011=0110,列竖式计算:
   0 1 0 1
+ 0 0 1 1
────
   0 1 1 0
②模2减法运算定义为:
0-0=0        0-1=1        1-0=1        1-1=0
例如0110-0011=0101,列竖式计算:
   0 1 1 0
  0 0 1 1
────
   0 1 0 1
③模2乘法运算定义为:
0×0=0        0×1=0        1×0=0        1×1=1
多位二进制模2乘法类似于普通意义上的多位二进制乘法,不同之处在于后者累加中间结果(或称部分积)时采用带进位的加法,而模2乘法对中间结果的处理方式采用的是模2加法。例如1011×101=100111,列竖式计算:
       1 0 1 1
     
×  1 0 1
    
──
            1 0 1 1
     0 0 0 0
 1 0 1 1
────
   1 0 0 1 1 1
④模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,列竖式计算:
               1 1 1 0
       ────
1 0 1 1〕1 1 0 0 1 0 0
      
 1 0 1 1
      ────
           1 1 1 1
        - 1 0 1 1
       ────
             1 0 0 0
          - 1 0 1 1
         ──
               0 1 1 0
            - 0 0 0 0
           ──
                 1 1 0
小结:通过对比我们不难发现,模2加与模2减两种运算与逻辑异或运算其运算法则完全相同,另外,模2乘除法都以模2加减法为基础,因此我们可以把模2运算看作简单的异或运算。实际上,CRC除法器就是由异或门以及时序电路构成的。