leetcode中的一个问题?

codinghuang
  • 142

原题链接

题目描述:
Given an integer, write a function to determine if it is a power of two.
也就是判断一个数是否是2的幂

我的代码如下:

class Solution {
public:
    bool isPowerOfTwo(int n) {
        if (n & (n - 1) == 0) {
            return true;
        }
        else {
            return false;
        }
    }
};

我的这段代码无法通过测试点:2

图片描述

回复
阅读 2.1k
3 个回答
lucifer
  • 5.3k

在JS中, === 的优先级是10 , & 的优先级是9. 因此会先计算 === 然后计算 &,因此你的答案应该增加括号(括号的优先级最高,为20),使得先进行 & 运算,再进行 === 运算。

参考: https://developer.mozilla.org...

是运算符优先级的问题:((n & n-1) == 0),但是你还没考虑n=0的情况。

可能是运算符优先级的问题,试试:

if ((n & (n - 1)) == 0) {
  return true;
} else {
   return false;
}

// 或者直接:
return !(n & n - 1);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏