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 = 8963
bin_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次方即可。
文章讨论了如何判断一个数是否为2的幂次方,关键在于该数的二进制表示中只有一个1且位于最高位。同时,通过找到二进制表示中1的位置,可以求得不超过给定数的最大2的幂次方。提供的Python代码示例展示了如何计算不超过特定数值的2的最高幂次方。
5634

被折叠的 条评论
为什么被折叠?



