判斷一個數是不是2的幾次冪,最簡單粗暴的做法就是直接迭代除以2,這里有一個更好的方法,那就是采用位運算。
我們觀察下面屬於2的幾次冪的數的變化規律,用2進制表示。
十進制 二進制 0 0
2 10
4 100
8 1000
16 10000
我們會發現凡是2的幾次冪0除外,用二進制表示第一位全是1,后面全是0。這個規律好像是這樣但是有什么用呢,不要急,你再看一下比他小一個數的規律就懂了。
十進制 二進制 1 01
3 011
7 0111
15 01111
發現比他小一個數全是第一位為0后面全為1,剛剛跟2的幾次冪對應的數相反,這時就可以用位運算中的與運算來解決了。
解決代碼:
def judge(num): num = int(num) return True if num == 0 or num & (num - 1) == 0 else False
