Binary/CRCdivision 余数

Binary/CRCdivision remainder

我试图创建一个代码来计算 Java 中 CRC 错误 detection/correction 的余数,但我不知道它和二进制除法有什么区别。

时间:

    BigInteger G = new BigInteger("1001", 2);
    BigInteger M = new BigInteger("101110", 2);
    BigInteger R = M.remainder(G);

R 值将为:1
但是当我手动计算 CRC 余数时,它将是:011

这里有什么区别,有没有计算CRC余数的方法或算法?

CRC 的余数是 多项式 除法的余数。您将被除数和除数的位视为 Galois Field of two elements (called GF(2)) 上的多项式系数。在该字段中,加法变为 exclusive-or,乘法变为 and。 1+1是0​​,不是2,因为没有2,只有0和1。

如果你做你应该从高中记住的多项式除法,你就会得到答案。只需这些位就可以轻松完成 GF(2):

          101
      --------
1001 / 101110
       1001
       ------
         1010
         1001
         ----
           11

所以我们得到商 101 和余数 11