首页 > 版块 > CRC校验 > 帖子正文

抛开CRC校验的“神秘面纱”

黄忠 发布于 2021-11-04 18:07
收藏 0 回复 0 浏览 95 原创

大家好!我是张飞实战电子黄忠老师!今天给大家抛开CRC校验的“神秘面纱”!

模2运算是一种二进制算法,CRC校验技术中的核心部分。与四则运算相同,模2运算也包括模2加法、模2减法、模2乘法、模2除法四种运算。


与四则运算不同的是模2运算不考虑进位和借位,模2运算是编码理论中多项式运算的基础。下面我们就来看一看什么是模2运算。


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


“模2加法”就是0和1之间的加法,其中0+0 =0,1+0 =0+1 =1,1+1=0。这种运算是比较常用的,并不神秘。对于任意多个数a1,a2,…,an(每个都是0或1),可以把它们做模2加法a1+a2+…+an。当这n个数中有奇数个1时,结果为1,否则结果为0。例如0101+0011=0110,列竖式计算:

image.png

模2减法是一种不考虑借位的减法,其定义如下:0-0=0,1-1=0,1-0=1,0-1=1。同样,第四式代表了模2减法的特征。在多位模减法中,每位都按上述定义进行运算,不考虑借位问题。根据上面减法可以得出一个结论:奇数个1相减得1,偶数个1相减得0。例如0110-0011=0101,列竖式计算:

image.png

一位数的模2乘法定义如下:0*0=0,0*1=0,1*0=0,1*1=1,多位数的模2乘法与普通乘法一样演算,区别是,部分积相加时按模2加,即奇数个1相加得1,偶数个1相加得0。例如1011×101=100111,列竖式计算:

image.png

模2除法是模2乘法的逆运算,定义如下:0÷1=0,1÷1=1,类似于普通的多位二进制除法,但是在如何确定商的问题上两者采用不同的规则。普通多位二进制除法按带借位的二进制减法,根据余数减除数够减与否确定商1还是商0,若够减则商1,否则商0。多位模2除法采用模2减法,不带借位的二进制减法,因此考虑余数够不够减除数是没有意义的。实际上,在CRC运算中,总能保证除数的首位为1,则模2除法运算的商是由余数首位与除数首位的模2除法运算结果确定。因为除数首位总是1,按照模2 除法运算法则,那么余数首位是1就商1,是0就商0。例如1011÷101=110101...001,列竖式计算:

image.png

模2算术是编码理论中多项式运算的基础。大家一定要掌握哦,下篇文章我们就一起看看它到底在CRC中是如何发挥作用的。

0 0
发表评论 侵权投诉
评论 (0)

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表乌云踏雪网立场。

文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。