java - BigInteger 中的位操作

标签 java bit biginteger

我最近在 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/

相关文章:

java - 如何将 Azure App Service 证书与 Java Spring 一起使用以启用 SSL

java - 多部分上传文件servlet

java - 运行 HornetQ 示例时出现 NullPointerException

java - Jenkinsfile (Declarative Pipeline) for Java/maven/Spring Boot

c++ - 如何将位序列放入字节(C/C++)

java - 如何将 BigInteger 转换为科学计数法字符串并返回?

java - Java 中的字符串到 BigInteger

c++ - 如何交换字节半字节?

c - 如何从字节数组中提取少量位或字节?

python - 如何像在 Python 2.7 上一样快地获取此 Python 3 代码?