有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

数学Java:确认方法二进制除法和查找余数是否正确?

我正在解析二进制文件,必须实现CRC算法,以确保文件没有损坏。问题是,当使用较大的数字时,我似乎无法使二进制数学工作

我正在尝试开始工作的示例:

BigInteger G = new BigInteger("11001", 2);
BigInteger M = new BigInteger("1110010000", 2);
BigInteger R = M.remainder(G);

我期待:
R = "0101"

但我得到了:
R = "1100"

我假设0101的其余部分是正确的,因为我在这本书中把它作为CRC算法的参考(它不是基于Java的),但我似乎无法让它工作。我可以让我手工解决的小型二进制计算工作,但不能让较大的计算工作。我承认,我还没有手工处理过较大的代码,这是我的下一步,但我想看看是否有人能指出我代码中的一个明显缺陷

有人能证实或否认我的方法是正确的吗

谢谢


共 (4) 个答案

  1. # 1 楼答案

    你的书是对的。答案是0101。产生这种差异的原因是,CRC二进制除法使用模加运算,因此在进行减法或加法时,可以对每个位执行异或运算,从而使11100-11001=00101,而不是00011。您可以参考Forouzan Chp 10的数据通信和网络

  2. # 2 楼答案

    CRC适用于多项式,而不是数字,所以你需要调整数学

  3. # 3 楼答案

    1100=12。11001 = 25, 1110010000 = 912. 912 % 25 = 12. 所以一切都很公平。你的书错了

  4. # 4 楼答案

    你自己算吧。你的号码是

    G=25
    M=912
    R = 912 % 25 = 12
    R = 1100 (binary)
    

    事实上,看起来Java正在为您提供正确的答案。 手工完成!还有别的问题