验证一个数是否可​​以分解为 2 的幂

jer*_*ate 2 algorithm math

是否可以验证一个数是否可​​以分解为 2 的幂的和,其中指数是连续的?

有算法来检查这个吗?

例子:在哪里

tri*_*cot 6

二进制表示形式将具有单个连续的 1 位组。

要检查这一点,您可以首先确定最低有效位的值,将该位添加到原始值,然后检查结果是否为2 的幂

对于给定的 ,这得出以下公式x

(x & (x + (x & -x))) == 0
Run Code Online (Sandbox Code Playgroud)

x当为零时,该表达式也成立。如果该案例需要作为解决方案被拒绝,则需要一个额外的条件。

在Python中:

(x & (x + (x & -x))) == 0
Run Code Online (Sandbox Code Playgroud)