这段代码意味着什么,以及在不使用位移的情况下,其他方法有什么用呢?
if ($n & ($n - 1))
答案 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 /非零值都是真的。