题意很简单,问一个数字n是否是2的几次幂。思路是用位运算做,如果你对位运算很敏感,你会发现,所有2的某次方的数字,转化成二进制之后,都只有一个1。比如 2->0010, 4->0100, 8->1000......
所以思路是比较n & n-1是否等于0即可。因为如果n是2的某次方,比它小1的数字里面一定是一堆1。
举个例子,16的二进制是10000,15的二进制是01111,两者做AND运算得到0。代码如下,
1 var isPowerOfTwo = function(n) { return n > 0 && (n & (n - 1)) === 0; };
来源:https://www.cnblogs.com/aaronliu1991/p/11675164.html