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