1.方法一:n&(n-1)=0
/** * @param {number} n * @return {boolean} */ var isPowerOfTwo = function(n) { if((n>0) && (!(n&(n-1)))){ return true; } else{ return false; } };
2.方法二:2^x=n;log(2^x)=log(n);xlog(2)=log(n);x=log(n)/log(2);精确范围0.00000000001
var res=Math.log(n)/Math.log(2); if(Math.abs(res - Math.round(res))< 0.0000000001){ return true; } else{ return false; }
3.方法三:统计二进制中1的个数必须为1个时,数值为2的幂次方
/** * @param {number} n * @return {boolean} */ var isPowerOfTwo = function(n) { var cnt=0; while(n>0){ cnt+=(n&0x01); n>>=1; } if(cnt === 1){ return true; } else{ return false; } };