问题
What does this code mean and what are other ways accomplish the same without using bit shifting?
if ($n & ($n - 1))
回答1:
That formula checks to see whether a number is a power of 2 (if your condition as written is true, then the number is not a power of two).
Stated another way, your test checks to see whether there is more than one "1" bit set in the binary representation of $n
. If there is zero or only one bit set, then your test will be false.
It is by far the most efficient way to determine that property.
回答2:
First, this code is valid PHP, so your title is poor.
Second, the binary arithmetic going on looks something like this:
42 = 101010
&
41 = 101001
-----------
40 = 101000
Like Greg states this is the fastest way to check for a power of 2 number, but the code you've given checks to see if the number is not a power of 2. This can easily be ascertained by PHP's policy of: any non-null/non-zero value is true.
来源:https://stackoverflow.com/questions/1551500/what-does-the-bitwise-code-n-n-1-do