我正在创建两个巨大的 BigIntegers,然后对它们进行运算。但是 and 操作不起作用,而是返回 0。为什么?
BigInteger aa = new BigInteger("213092840173096182527577008347205670468257779233261101799142588416");
BigInteger bb = new BigInteger("226156424291633194186662097633113218007386784142018559245972777080014766080");
System.out.println(aa.and(bb));
Output: 0
我对这两个数字进行了 BigInteger“或”运算,“或”运算运行良好。还有其他人看到同样的问题吗?
请注意,我使用的是 jdk 1.8。
最佳答案
那是因为他们的和
为零!它们没有共同点。
使用 python 验证:
>>> x = 226156424291633194186662097633113218007386784142018559245972777080014766
080
>>> y = 213092840173096182527577008347205670468257779233261101799142588416
>>> x & y
0L
>>> bin(x)
'0b10000000000000000000000000000000000000000000000000000000000000000000000000000
00000001100000000000000000000000000000000000000100000000000000000000010010100000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000'
>>> bin(y)
'0b10000001100000000000000000000000000000000000000000000000000000110000000000000
00111000000001000000000000000000000000000000000000000000000000000000000000000000
1000000000000000000000000000000000000000000000000000000000000'
>>>
顺便说一句,一般性评论:在声明一个经过良好测试的大量使用的库中的错误之前,谨慎的做法是查看您是否使用不当/结果是否符合预期。
关于Java BigInteger.and 不适用于大数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29981534/