为什么我的(Leetcode#231)2的幂的实现给出了错误的结果?

该问题要求编写一个以整数作为输入的函数,如果整数是2的幂,则返回true。我想同时使用按位与运算符和逻辑移位来编写函数,以实践这些概念。我尝试遍历许多输入示例,并认为我的代码可以正常工作,但是当Leetcode使用测试案例“ n = 2”时,我的代码返回false而不是true。

我的思路是,如果最低有效位与1进行AND运算等于0(我试图对位进行掩码,并且仅对n的LSB执行AND操作),那么n就有可能成为2.因此,我将n右移一位,并评估n是否为1(然后是,它是2的幂,然后将true返回给该函数)。如果n不为1,并且LSB与1的ANDed不为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;
}
zjzj5823 回答:为什么我的(Leetcode#231)2的幂的实现给出了错误的结果?

您的逻辑是正确的。不幸的是,您陷入了一个运算符优先级陷阱:由于... history==的绑定比&的绑定更紧密。 n&1 == 0的解析就像n&(1 == 0)一样,自然总是0。

解决方法是使用(n & 1) == 0

本文链接:https://www.f2er.com/3097533.html

大家都在问