6

这段代码是什么意思,还有哪些其他方法可以在不使用位移的情况下完成相同的操作?

if ($n & ($n - 1))
4

2 回答 2

18

该公式检查数字是否为 2 的幂(如果您所写的条件为真,则该数字不是2 的幂)。

换句话说,您的测试检查是否在 .的二进制表示中设置了多个“1”位$n。如果设置为零或仅设置一位,那么您的测试将是错误的。

这是迄今为止确定该属性的最有效方法。

于 2009-10-11T19:20:56.403 回答
5

首先,这段代码是有效的 PHP,所以你的标题很糟糕。

其次,正在进行的二进制算术看起来像这样:

42 = 101010
   &
41 = 101001
-----------
40 = 101000

就像 Greg 所说的那样,这是检查 2 的幂的最快方法,但是您给出的代码会检查该数字是否不是 2 的幂。这可以很容易地通过 PHP 的策略来确定:任何非空/非零值都是真的。

于 2009-10-11T19:24:27.847 回答