若是一個整數是2的整數次冪,那麼當它轉化成二進制時,只有最高位是1,其餘位都是0。git
2的整數次冪一旦減1,它的二進制數字就所有變成了1github
,這時候若是用原數值(2的整數次冪)和它減1的結果進行按位與運算,也就是n &(n1)ui
0和1按位與運算的結果是0,因此凡是2的整數次冪和它自己減1的結果進行與運算,結果都一定是0。反之,若是一個整數不是2的整數次冪,結果必定不是0.cdn
那麼很簡單,對於一個整數n,只須要計算n&(n1)的結果是否是0。這個方法的時間複雜度只有O(1)blog