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

时间:2009-12-09 08:02:04

标签: java math binary

我正在解析二进制文件,必须实现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 个答案:

答案 0 :(得分:7)

自己做数学。你的号码是

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

看起来Java实际上正在为您提供正确的答案。 手工完成!还有别的错误......

答案 1 :(得分:2)

那么,1100 = 12. 11001 = 25,1110010000 = 912. 912%25 = 12.所以公平。你的书错了。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

你的书是对的。答案是0101.差异的原因是CRC二进制除法使用模块化加法,这样当你减去或加上11100-11001 = 00101而不是00011时,你在每个位上执行XOR运算。你可以参考数据通信和Forouzan Chp 10联网。