2的幂次方
判断一个数是否为2的幂次方?
我们可以参考如下链接:
判断一个数是否为2的N次方
借鉴文中的分析,我认为:
其实一个数n
,如果是2
的幂次方数,则n
的二进制原码中一定只有一个1
,且在最高位;而n-1
的二进制原码中一定只有一个0
,也在最高位,那么n&(n-1)==0
。
反之,如果n&(n-1)
的结果是0
,无法推出n
是2
的幂次方。例如n
等于1
,n-1
等于0
,n&(n-1)
的结果是0
,但是n
不是2
的幂次方。
但是,n
的二进制原码中只有一个1
,且在最高位,可以推出n
是2
的幂次方。
所以我们的结论是:
n
是2
的幂次方 ← → ←→ ←→ n
的二进制原码中只有一个1
,且在最高位
求解不大于数n的最大的2的幂次方?
同理,我们只需要找到n
的二进制原码中1的最左位置,将其余位置0即可。如下为python实现代码:
seed_length = 8963bin_sl = bin(seed_length)neurons = pow(2, len(bin_sl)-3)
其中,neurons
为不大于seed_length
的2
的幂次方的上界。8963
转换为二进制原码为0b1111001101100
,即代码中的bin_sl
,其数据类型为<class 'str'>
,0b
标识着二进制字符串,不大于seed_length
的2
的幂次方的上界即为0b1000000000000
。由于二进制原码没有前置0,最高位必为1,所以我们直接获取二进制字符串长度,之后求解2
的len(bin_sl)-3
次方即可。