gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 07:21:31 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com