模2除法(CRC校验码计算)

2019-04-13 11:40发布

鉴于网上的讲解自己好不容易才看懂…所以自己整理了一下, 也方便大家能够理解

如果有不对或者不准确的地方,恳请大家指出...

模2加减法

模2除法需要用到模2加减法,关于模2加减法,其实就是异或操作,规则如下: //不需要考虑进位和借位 0 ± 0 = 0 1 ± 1 = 0 0 ± 1 = 1 1 ± 0 = 1 例: 1101 ± 1001 = 0100 计算如下: 1 1 0 1 ± 1 0 0 1 ----------- 0 1 0 0 简记:同为0,异为1

模2除法:

规则:假设被除数X,和除数P,余数R
1. 被除数X除以P(对X和P做模2加减法),被除数首位为1时,商1,为0时商0
2. 所得余数去除首位(左移一位): - R第一位为0,将其作为新的被除数,除以0,此时其首位为0,商即为0 - R第一位为1,将其作为新的被除数,除以P,此时其首位为1,商即为1 3. 重复第2步直到R位数少于P位数

例:1111000对除数1101做模2除法:

先说结果: 商1011111

整体运算

1 0 1 1 //商 --------------- 1 1 1 1 0 0 0 //被除数,注意首位为1 1 1 0 1 //被除数首位为1,除以除数 --------------- 0 1 0 0 0 0 //余数去除首位,作为新的被除数 0 0 0 0 //被除数首位为0,除以0 --------------- 1 0 0 0 0 //余数去除首位,作为新的被除数 1 1 0 1 //被除数首位为1,除以除数 --------------- 1 0 1 0 //余数去除首位,作为新的被除数 1 1 0 1 //被除数首位为1,除以除数 --------------- 0 1 1 1 //余数,此时余数位数少于除数,不能继续除了(忽略首位0)

分步分析

第一步(每一步其实都是模2加减法运算):
1 //商 ------------- 1 1 1 1 0 0 0 //被除数,注意首位为1 1 1 0 1 //除数 ------------- 0 0 1 0 0 0 0 //余数,模2运算后结果
商的第一位:被除数首位为1,商为1(只要被除数首位非0,商就是1)
第二步:余数去除首位(左移一位),当第一位为0时,除以0;为1时,除以除数。
1 0 //商 --------------- 0 1 0 0 0 0 //余数去除首位,作为新的被除数 0 0 0 0 //被除数首位为0,除以0 --------------- 0 1 0 0 0 0 //余数,模2运算后结果
商的第二位:被除数首位为0,商为0(只要被除数首位是0商就是0)
第三步
1 0 1 //商 ---------------- 1 0 0 0 0 //余数去除首位,作为新的被除数 1 1 0 1 //被除数首位为1,除以除数 ---------------- 0 1 0 1 0 //余数,模2运算后结果
商的第三位:被除数首位为1,商为1
第四步
1 0 1 1 //商 ---------------- 1 0 1 0 //余数去除首位,作为新的被除数 1 1 0 1 //被除数首位为1,除以除数 ---------------- 0 1 1 1 //余数,此时余数位数少于除数,不能继续除了
商的第四位:被除数首位为1,商为1
此时不能继续做除法,计算结束
得到最终结果: 商1011111

如果有不对或者不准确的地方,恳请大家指出...