python判断一个数是否是2的几次幂

判断一个数是不是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
posted @ 2018-12-24 13:49  如何好听  阅读(5617)  评论(0编辑  收藏  举报