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: 按位運算的優先級低于比較運算 ==
}
}
}