按位代码“$ n&($ n - 1)”有什么作用?

时间:2009-10-11 19:16:51

标签: php bit-manipulation bitwise-and

这段代码意味着什么,以及在不使用位移的情况下,其他方法有什么用呢?

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

2 个答案:

答案 0 :(得分:17)

那个公式checks to see whether a number is a power of 2(如果你写的条件是真的,那么这个数字是2的幂)。

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

这是确定该财产的最有效方式。

答案 1 :(得分:5)

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

其次,二进制算法看起来像这样:

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

与Greg一样,这是检查2号码功率的最快方法,但您提供的代码会检查该号码是否不是2的幂。这可以通过PHP的策略很容易地确定:任何非null /非零值都是真的。