我最近在BigInteger Java类中学到了一个名为
的方法BigInteger.testBit(n)
它的主要功能是(this & (1<<n)) != 0)
,但我不太了解源代码
return (getInt(n >>> 5) & (1 << (n & 31))) != 0;
有人可以解释一下吗?
答案 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 ^。这会让你有点掩码,精确地选择你关心的位。