BigInteger中的位操作

时间:2015-11-17 20:37:25

标签: java bit biginteger

我最近在BigInteger Java类中学到了一个名为

的方法
BigInteger.testBit(n)

它的主要功能是(this & (1<<n)) != 0),但我不太了解源代码

return (getInt(n >>> 5) & (1 << (n & 31))) != 0;

有人可以解释一下吗?

1 个答案:

答案 0 :(得分:2)

我不熟悉它是如何实现的,但是根据该代码判断,我假设BigInteger是通过将它的值存储在整数列表中来实现的,{{ 1}}返回其中的第n个,其中0 =最不重要。

第一个将存储最低有效32位,getInt(n)将存储位32-63等。通过将getInt(1)向右移5,您将获得内部列表中具有整数的索引你关心的那一点,相当于n div 32。

使用该整数,然后使用n从中选择您关心的位。 n&amp; 31是n modulo 32的等价物,(1 << (n & 31))相当于2 ^。这会让你有点掩码,精确地选择你关心的位。