Что делает побитовый код "$n& ($n - 1)"?
Что означает этот код и каковы другие способы сделать то же самое без использования сдвига битов?
if ($n & ($n - 1))
2 answers
Эта формула проверяет, является ли число степенью 2 (если ваше условие, как написано, верно, то число не степень два).
Другими словами, ваш тест проверяет, установлено ли более одного бита "1" в двоичном представлении $n
. Если установлен ноль или только один бит, то ваш тест будет ложным.
Это, безусловно, самый эффективный способ определить это свойство.
Во-первых, этот код является допустимым PHP, поэтому ваш заголовок плохой.
Во-вторых, происходящая двоичная арифметика выглядит примерно так:
42 = 101010
&
41 = 101001
-----------
40 = 101000
Как утверждает Грег, это самый быстрый способ проверить степень числа 2, но код, который вы дали, проверяет, является ли число не степенью 2. Это можно легко проверить с помощью политики PHP: любое ненулевое/ненулевое значение является истинным.