实现一个方法,来判断一个正整数是否是 2 的整数次幂(如 16 是 2 的 4 次方,返回 true;18 不是 2 的整数次幂,则返回 false)。要求性能尽可能高。

小灰的具体想法如下。
创建一个中间变量 temp,初始值是 1。然后进入一个循环,每次循环都让 temp 和目标整数相比较,如果相等,则说明目标整数是 2 的整数次幂;如果不相等,则让 temp 增大 1 倍,继续循环并进行比较。当 temp 的值大于目标整数时,说明目标整数不是 2 的整数次幂。
function isPowerOf2(int num) {int temp = 1;while(temp<=num){if(temp == num){return true;}temp = temp*2;}return false;}

2的整数幂(2、4、8、16),他们的二进制第一位是1,其他位都是0,所以向左移一位(右边用0填充),相当于乘以2;
function isPowerOf2V2(int num) {int temp = 1;while(temp<=num){if(temp == num){return true;}temp = temp<<1;}return false;}

最优解




function isPowerOf2(int num) {return (num & num - 1) == 0;}
