该问题要求编写一个将整数作为输入的函数,如果整数是 2 的幂,则返回 true。我想使用按位 AND 运算符和逻辑移位来编写我的函数来练习这些概念。我尝试遍历许多输入示例,并认为我的代码可以正常工作,但是当 Leetcode 使用“n=2”的测试用例时,我的代码返回 false 而不是 true。
我的思路是,如果与 1 相加的最低有效位等于 0(我正在尝试位掩码并且只对 n 的 LSB 执行 AND 运算),那么 n 有可能是 2 的幂。所以我将 n 右移一位,并评估 n 是否为 1(然后是的,它是 2 的幂,并返回 true 给函数)。如果 n 不是 1,并且与 1 相加的 LSB 不是 0,那么这意味着 n 绝对不是 2 的幂 - 所以我跳出 while 循环并返回 false。
任何人都可以帮助查明出了什么问题吗?
bool isPowerOfTwo(int n){
while(n>0)
{
if(n==1)
return 1;
else if(n&1 == 0)
n = n>>1;
else
break;
}
return 0;
}
最佳答案
你的逻辑是对的。不幸的是,您陷入了运算符优先级陷阱:由于 ... history , ==
的绑定(bind)比 &
更紧密。 n&1 == 0
被解析为 n&(1 == 0)
自然总是 0。
解决方法是使用 (n & 1) == 0
。
关于c - 为什么我的 (Leetcode #231) Power of Two 的实现给出了错误的结果?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58871299/