2015-05-01 30 views
1

我正在创建两个巨大的BigInteger,然后他们。但是和操作不起作用,而是返回0.为什么?Java BigInteger.and不适用于大数字?

BigInteger aa = new BigInteger("213092840173096182527577008347205670468257779233261101799142588416"); 
BigInteger bb = new BigInteger("226156424291633194186662097633113218007386784142018559245972777080014766080"); 
System.out.println(aa.and(bb)); 

输出:0

我做了一个BigInteger '或' 在这两个数字和 '或' 运转正常工作。其他人看到同样的问题?

请注意,我正在使用jdk 1.8。

+0

虽然这将是非常随机的,这些数字实际上和0的任何可能性?不大可能,但可能。 –

+0

是的..我的想法正是如此。我想知道预期结果是什么 – odedsh

+0

就是这样。我在控制台中以十进制格式打印两个数字,并感到困惑。我后来设法用十六进制打印它们,并看到它们的确是零。我的错! – Shubhojit

回答

4

那是因为他们的and是零!他们没有共同点。

验证使用python:

>>> x = 226156424291633194186662097633113218007386784142018559245972777080014766 
080 
>>> y = 213092840173096182527577008347205670468257779233261101799142588416 
>>> x & y 
0L 
>>> bin(x) 
'0b10000000000000000000000000000000000000000000000000000000000000000000000000000 
00000001100000000000000000000000000000000000000100000000000000000000010010100000 
00000000000000000000000000000000000000000000000000000000000000000000000000000000 
00000000000' 
>>> bin(y) 
'0b10000001100000000000000000000000000000000000000000000000000000110000000000000 
00111000000001000000000000000000000000000000000000000000000000000000000000000000 
1000000000000000000000000000000000000000000000000000000000000' 
>>> 

顺便说一句,一般的评论:自称在经过充分测试的大量使用库中的错误之前,谨慎的做法是看你是否被错误地使用它/按预期的结果。

0

已解决。这两个数字是十进制的,然后真的为零。

+0

为什么你觉得需要添加自己的答案,当1)你可以编辑你的问题,2)已经有一个答案! –

+0

因为我们都同时写了答案。不需要太挑剔。比特便宜。 – Shubhojit

+2

我不挑剔。这个网站有一些关于提问者回答他们自己的问题的规则,只要编辑问题就足够了。此外,9分钟的差异不是并发的。 –