面試題:如何判斷一個數是否是2的整數次冪


題目

如何判斷一個數是不是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;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM