Given an integer, write a function to determine if it is a power of two.
Solution:
这题使用一个 trick 就是:
如果一个数 x是2的n 次方,则它除最高位之外,其余 bits 都是0;那么它减1得到的数的二进制表示则为所有 bits 都是1。
因此,如果按位与x 和(x-1)则得0。其余 case 都不会为0。
*2016-11-12:注意!当 x=0时 x&(x-1) = 0,而0不是2的 n 次方。这个 case 碰巧被下面代码中的 if(n <= 0)
排除了
public class Solution
{
public boolean isPowerOfTwo(int n)
{
if(n <= 0)
return false;
else
{
return (n & (n-1)) == 0 ? true : false; // Note: 按位运算的优先级低于比较运算 ==
}
}
}