这段代码是什么意思,还有哪些其他方法可以在不使用位移的情况下完成相同的操作?
if ($n & ($n - 1))
该公式检查数字是否为 2 的幂(如果您所写的条件为真,则该数字不是2 的幂)。
换句话说,您的测试检查是否在 .的二进制表示中设置了多个“1”位$n
。如果设置为零或仅设置一位,那么您的测试将是错误的。
这是迄今为止确定该属性的最有效方法。
首先,这段代码是有效的 PHP,所以你的标题很糟糕。
其次,正在进行的二进制算术看起来像这样:
42 = 101010
&
41 = 101001
-----------
40 = 101000
就像 Greg 所说的那样,这是检查 2 的幂的最快方法,但是您给出的代码会检查该数字是否不是 2 的幂。这可以很容易地通过 PHP 的策略来确定:任何非空/非零值都是真的。