如何快速的判断一个数是不是2的整数次方

如题。。。。有什么简单快速的方法吗


补充:

这里的数特指正整数

阅读 7.1k
4 个回答

将2的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1,并且1后面跟了n个0; 因此问题可以转化为判断1后面是否跟了n个0就可以了。

如果将这个数减去1后会发现,仅有的那个1会变为0,而原来的那n个0会变为1;因此将原来的数与去减去1后的数字进行与运算后会发现为零。

最快速的方法:

  (number & number - 1) == 0
新手上路,请多包涵

请问为什么我的实现最佳答案的js代码无法通过codewars的testing。。。

function isPowerOfTwo(n){
  //.. should return true or false ..
  return n & (n-1) == 0 ? true : false;
}
新手上路,请多包涵
javaboolean isPowerOfTwo(int val) {
        return (val & -val) == val;
    }
推荐问题
宣传栏