Первое условие исключает 0, что, очевидно, не является силой 4, но неправильно проходит следующие два теста. (EDIT: Нет, это было бы не так, как указано. Первый тест является избыточным.)
Следующий приятный трюк: он возвращает true тогда и только тогда, когда это число равно 2. Сила двух характеризуется наличием только одного набора бит. Число с одним битом минус один приводит к числу со всеми битами, предшествующими установленному биту (т. Е. 0x1000 минус один - 0x0111). И эти два числа, и вы получите 0. В любом другом случае (т. Е. Без мощности 2) будет по крайней мере один бит, который перекрывается.
Таким образом, в данный момент, мы знаем, что это сила 2.
x & 0x55555555
возвращает не ноль (= True) если даже кусал установлен (бит 0, бит 2, бит 4 бит 6, и т.д.). Это означает, что это сила 4. (т. Е. 2 не проходит, но 4 прохода, 8 не проходит, 16 проходов и т. Д.).
x & (x - 1) удаляет минимальный 1 бит из числа. – starblue