Вопрос

Что означает этот код и каковы другие способы добиться того же самого без использования сдвига битов?

if ($n & ($n - 1))
Это было полезно?

Решение

Эта формула проверяет, является ли число степенью 2 (если ваше условие, как написано, верно, то число равно нет степень двойки).

Другими словами, ваш тест проверяет, установлено ли более одного бита «1» в двоичном представлении $n.Если установлен ноль или только один бит, ваш тест будет ложным.

Это, безусловно, самый эффективный способ определить это свойство.

Другие советы

Во-первых, этот код является валидным PHP, поэтому ваш заголовок плохой.

Во-вторых, двоичная арифметика выглядит примерно так:

42 = 101010
   &
41 = 101001
-----------
40 = 101000

Как утверждает Грег, это самый быстрый способ проверить степень числа 2, но код, который вы дали, проверяет, является ли число не степень 2.Это легко проверить с помощью политики PHP:любое ненулевое/ненулевое значение является истиной.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top