判断一个数是不是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