【python】判断一个数是否是2的幂次方
作者:互联网
一个数是否是2的幂次方,比较常用的是递归和移位运算进行判断。
1. 递归算法的思想很简单,就是不断的模上2去判断。
2. 如果一个数是2的幂,那么它的二进制表示中就只有一位1,例如:10000,1000,100等等。所以如果对数字1进行移位操作,总会在移到某个位的时候和这个数相等。这就是移位判断的思想。
def twopower(n): res = 1 while res < n: res = res << 1 if res == n: return True else: return False
3. 因为二进制表示的2的幂次方数中只有一个1,后面跟的是n个0; 因此问题可以转化为判断1后面是否跟了n个0。如果将这个数减去1后会发现,仅有的那个1会变为0,而原来的那n个0会变为1;因此将原来的数与上(&)减去1后的数字,结果为零。
def twopart(n): return n&(n-1) == 0
扩展:
判断是不是4的幂次方?:【参考上面方法2】判断移动的位数是不是偶数(是否%2 == 0)
判断是不是8的幂次方?:判断移动位数会否%3 == 0
标签:判断,python,res,是否是,二进制,def,次方,移位 来源: https://www.cnblogs.com/ltkekeli1229/p/16396342.html