題目
如何判斷一個數是不是2的整數次冪?
解題方法
思路:
首先把2的整數次冪轉換成二進制數,十進制的2轉換成二進制是10B,4轉換成二進制是100B,8轉化成二進制是1000B……
如果一個整數是2的整數次冪,那么當它轉化成二進制時,只有最高位是1,其他位都是0!接下來如果把這些2的整數次冪各自減1,再轉化成二進制。

這時候如果用原數值(2的整數次冪)和它減1的結果進行按位與運算,也就是n&(n-1),結果則為0

結論:0和1按位與運算的結果是0,所以凡是2的整數次冪和它本身減1的結果進行與運算,結果都必定是0。反之,如果一個整數不是2的整數次冪,結果一定不是0!
對於一個整數n,只需要計算n&(n-1)的結果是不是0。這個方法的時間復雜度只有O(1)。
public static boolean isPowerOf2(int num) { return (num & num - 1) == 0; }