模二运算、循环冗余检验(CRC)

简介: 模二运算、循环冗余检验(CRC)

前言

详解计算机网络基础中的循环冗余检验(CRC),从模二运算入手,举例说明,层层深入,一举拿下循环冗余算法。

模二运算

简单来说就是:异或运算 (相同为0,相异为1)

1.模二加减运算

0 ± 0 = 0 0±0=00±0=0

0 ± 1 = 1 0±1=10±1=1

1 ± 0 = 1 1±0=11±0=1

1 ± 1 = 0 1±1=01±1=0


2.模二乘法运算

    1101
×    101
——————————
    1101
   0000
  1101
——————————
  111001

3.模二除法运算

            110101(商)
         _____________
(除数)1101 |  101001000(被除数)
            1101
            ————
            01110
             1101
             ————
             001110
               1101
               ————
               001100
                 1101
                 ————
                  001 (余数,位数为除数位数-1)        

循环冗余检验

帧检验序列(FCS):模二除法运算所得的余数,例如上面模二除法运算所得的余数是 001 在循环冗余校验中就叫做帧检验序列。

生成多项式:用多项式表示循环冗余检验中的被除数与除数,例如上面模二除法运算的除数 1101 就可以表示成image.png

样例

发送的数据(被除数):M = 101001(k = 6)

除数:P = 1101(n = 3)

① 补零:在数据(被除数)后面补 n 个零,n 是除数的位数 -1,在这里补 3 个零(补零这个步骤是为了求 FCS,进而得到接收方接收到的序列)

② 运用模二除法运算得:

            110101(商)
         _____________
        1101 |  101001000(被除数,后面三个0是补的)
            1101
            ————
            01110
             1101
             ————
             001110
               1101
               ————
               001100
                 1101
                 ————
                  001 (余数,位数 n 为除数位数-1)        

即商 Q = 110101(没用),余数 R1 = 001(帧检验序列FCS)

③ 所以发送的帧为 101001 001,即接收方接收到的帧为 101001 001。

④ 用接收方接收到的帧作为被除数,再与除数进行模二运算,得到新的余数R2。

⑤ 判断,若R2 = 0,则这个帧没有差错,否则有错(但是无法判断哪里错了)。

举例说明

image.png

            1101010(商)
         _____________
       11001 |  10110011010
            11001
            —————
            011110
             11001
             —————
             001111
              00000
              —————
               11111
               11001
               —————
               001100
                00000     
                —————
                 11001
                 11001
                 —————
                 000000
                 000000
                  —————
                      0

④ 判断:结果为 0,没有出错


image.png

            100001(商)
         _____________
       11001 |  1100110000
            11001
            —————
            0000010000(简便运算:该步骤后面从被除数中拉下来4位,则直接在商里补4个零即可)
                 11001
                 —————
                  1001

image.png

            1100001010(商)
         __________________
       10011 |  11010110110000
            10011
            —————
            010011
             10011
             —————
             0000010110
                  10011
                  —————
                  0010100
                    10011
                    —————
                     01110(超出4位,从后往前取4位,得到R=1110)

④ 传输的数据为: 1101 0110 11 1110

2.最后一个1变成了0 → 1101 0110 11 1100

① 直接进行模二除法运算:

            1100001010(商)
         __________________
       10011 |  11010110111100
            10011
            —————
            010011
             10011
             —————
             0000010111
                  10011
                  —————
                  0010010
                    10011
                    —————
                      0010 (从后往前保留4位)

② 判断:R不为0,出现差错

3.最后两个1变成了0 → 1101 0110 11 1000

① 直接进行模二除法运算:

            1100001010(商)
         __________________
       10011 |  11010110111000
            10011
            —————
            010011
             10011
             —————
             0000010111
                  10011
                  —————
                  0010000
                    10011
                    —————
                      0110 (从后往前保留4位)

② 判断:R不为0,出现差错

目录
相关文章
|
7月前
CRC与FCS的区别和联系
CRC与FCS的区别和联系
308 0
|
7月前
|
算法
异或算法
异或算法
CRC循环冗余码计算
CRC循环冗余码计算
151 0
|
存储 C语言
CRC编码计算方法及C语言实现
CRC(Cyclic Redundancy Check)是一种常用的错误校验码,用于检测和纠正传输过程中的错误。在数据通信和存储中,CRC编码被广泛应用,因为它能够高效地检测错误,并且实现简便。
286 0
|
机器学习/深度学习 算法
算法提升(二) 异或法
算法提升(二) 异或法
334 2
算法提升(二) 异或法
|
存储 算法 编译器
CRC循环校验码的系统仿真及其应用
CRC循环校验码的系统仿真及其应用
691 0
CRC循环校验码的系统仿真及其应用
|
人工智能 Windows
CF617E XOR and Favorite Number(异或前缀和+莫队)
CF617E XOR and Favorite Number(异或前缀和+莫队)
70 0
【13. 二进制中1的个数、位运算】
## 位运算 >n 的 二进制表示中第K位是几 > >n = 15 = (1111)<sub>2</sub> >1. 先把第K位移动到最后一位 n >> k >2. 看个位是几 x & 1 > >(1)和(2)操作合并 `n >> k & 1`
114 0
【13. 二进制中1的个数、位运算】
位运算:二进制中1的个数
题目: 输入一个 32 位整数,输出该数二进制表示中 1 的个数 注意: 负数在计算机中用其绝对值的补码来表示。 数据范围: −100≤ 输入整数 ≤100 样例1: 输入:9 输出:2 解释:9的二进制表示是1001,一共有2个1。 样例2: 输入:-2 输出:31 解释:-2在计算机里会被表示成11111111111111111111111111111110, 一共有31个1。
97 0