【发布时间】:2019-11-15 06:14:28
【问题描述】:
问题要求编写一个以整数作为输入的函数,如果整数是 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;
}
【问题讨论】:
-
或者你可以简单地使用:
return n > 0 && (n & (n-1)) == 0; -
或者对于
unsigned值只是return v && !(v & (v - 1));
标签: c bit-manipulation