java - 理解java代码 - 检查一个整数是否是2的幂

标签 java debugging operators

我在 Leetcode.com 看到了这段高效编写的代码

public static boolean isPowerOfTwo(int n) {
            return n>0 && ((n&(n-1))==0);
        }

这工作得非常好,但我无法弄清楚代码中单个“&”的工作原理。 有人可以努力解释一下代码是如何工作的吗?

按照同样的逻辑,用什么代码来确定一个整数是否是 3 的幂?

最佳答案

单个 & 是按位“与”运算符(与作用于 boolean 值的 && 相反)。

因此,当您对两个整数使用 & 时,结果是它们的二进制表示形式的逻辑“与”。

此代码之所以有效,是因为 2 的任何幂都将是 1 后跟一定数量的 0(例如,4 是 100、8 是 1000 等)。任何 2 的幂,减去 1,都将是全 1(例如,3 是 11,7 是 111)。 因此,如果您取 2 的幂,并按位求和它本身减 1,则应该只有 0。但是,除 2 的幂以外的任何值都会给出非零答案。

示例:
1000 = 8
0111 = 7 (8-1),并且 '&' 给出
0000 = 0

但是,如果您有类似 6 的数字(不是 2 的幂):
110 = 6
101 = 5 (6-1),并且 '&' 给出
100 = 4(不等于 0,因此代码将返回 false)。

我希望这已经清楚了!

关于java - 理解java代码 - 检查一个整数是否是2的幂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35690496/

相关文章:

Java Spring MVC 返回多个值

java - 如何获取和设置 Minecraft 中方 block 项目的元数据值?

javascript - 如何覆盖javascript对象数组中的元素

c - C中的二进制补码加法溢出

javascript - 为什么下面的比较输出 false?

java - 从文本文件读取时如何比较不同行的字符串

java - 在 Java 中使用处理 PDE 文件?

Xcode View 调试器 : How can I reveal in the hierarchy the selection in the 3-D inspector?

c++ - 'x += x--' 之后的 x 是什么?

运算符的 C++ 链接 << for std::cout like usage