使用位运算判断是否为2的n次方

问题:给定一个数字,判断他是否为2的n次方
第一种方法:我们会发现如果是数字符合2的n次方的话,他有一个特点:就是让他一直除以2最终他会得到1.否则的话就不符合条件。所以就会写出一下代码

def power_2(n):
    if  n == 0:
        return False
    while(n % 2 == 0 ):
        n = n / 2
    if n == 1:
        return True
    else:
        return False

print(power_2(0))

然而还会有更为简单的算法,那就是位运算。我们会发现符合2的n次方的数字x如果转换为二进制都是符合10000…这种形式。然后重点来了!! 我们如果求这个数减一(x-1)的二进制会得到01111…这种形式。这里我画图说明:
在这里插入图片描述
所以满足x与x-1进行与运算为0的数字就是符合条件的数字,这种方法比上面要快很多,因为计算机就是处理二进制要很快。大家可以测试一下

def power_2(n):
    if n == 0 or n == 1:
        return False
    else:
        if (n & (n - 1)) == 0:
            return True
        else:
            return False

print(power_2(256))

这种算法会比上面简洁很多,所以说要好好掌握位运算!这是一种很高效的方法

猜你喜欢

转载自blog.csdn.net/qq_42166308/article/details/103980076
今日推荐