What does the bitwise code "$n & ($n - 1)" do?

bit-manipulation, bitwise-and, php

Solution

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.

Problem

What does this code mean and what are other ways accomplish the same without using bit shifting? ``` if ($n & ($n - 1)) ```

Original source

Related problems