我最近在 BigInteger Java 类中学习了一个名为
的方法BigInteger.testBit(n)
其主要功能是(this & (1<<n)) != 0)
,但是不太懂源码
return (getInt(n >>> 5) & (1 << (n & 31))) != 0;
谁能解释一下吗?
最佳答案
我不熟悉它是如何实现的,但是根据该代码判断,我假设 BigInteger 是通过将其值存储在整数列表中来实现的,并且 getInt(n)
返回其中的第 n 个,其中 0 = 最不重要。
第一个将存储最低有效 32 位,getInt(1)
将存储位 32-63 等。通过移位 n
右移 5,您将获得内部列表中包含您关心的位的整数的索引,它相当于 n div 32。
有了这个整数,你就可以用 (1 << (n & 31))
从中选出你关心的部分。 。 n & 31 相当于 n 模 32,而 1 <<
相当于 2^。这将为您提供一个位掩码,可以精确选择您关心的位。
关于java - BigInteger 中的位操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33766497/