Что делает побитовый код «$ n & ($ n – 1)»?

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

if ($n & ($n - 1)) 

Related of "Что делает побитовый код «$ n & ($ n – 1)»?"

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

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

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

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

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

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

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