【问题标题】:Java: confirm method Binary division and find remainder is correct?Java:确认方法二进制除法并找到余数是否正确?
【发布时间】:2010-12-24 17:54:10
【问题描述】:

我正在解析二进制文件,并且必须实施 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 的),但我似乎无法让它工作。我可以进行手动解决的小型二进制计算,但不能进行较大的二进制计算。我承认我还没有手工完成较大的工作,这是我的下一步,但我想看看是否有人能指出我的代码中存在的明显缺陷。

谁能确认或否认我的方法是正确的?

谢谢

【问题讨论】:

    标签: java math binary


    【解决方案1】:

    自己算算。你的号码是

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

    看起来 Java 实际上可以为您提供正确的答案。 亲手搞定!还有什么问题……

    【讨论】:

    • 哇......我不觉得害羞吗。我一直在努力实施这个计划,以至于我觉得我的大脑已经有点融化了。出于某种原因,我打算用二进制进行数学运算...无论如何,谢谢您的建议。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      CRC 适用于多项式,而不是数字,因此您需要调整数学。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-06-02
          • 1970-01-01
          • 2013-04-25
          • 2017-11-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-11-25
          相关资源
          最近更新 更多