该问题要求编写一个将整数作为输入的函数,如果整数是 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/

10-11 05:07
查看更多