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

Ali*_*xel 6 php bit-manipulation bitwise-and

这段代码意味着什么,以及在不使用位移的情况下以其他方式实现同​​样的目标?

if ($n & ($n - 1))
Run Code Online (Sandbox Code Playgroud)

Gre*_*ill 17

该公式检查一个数字是否是2的幂(如果你写的条件是真的,那么这个数字不是2的幂).

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

它是迄今为止确定该财产的最有效方式.


Rob*_*t K 5

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

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

42 = 101010
   &
41 = 101001
-----------
40 = 101000
Run Code Online (Sandbox Code Playgroud)

像格雷格所说的那样,这是检查2数字幂的最快方法,但你给出的代码检查这个数字是不是2的幂.这可以通过PHP的策略轻松确定:任何非null /非零值都为真.