Вопрос оператора PHP if (& оператор)
Я использую функцию, которую нашел в Интернете. Что означает & в этом условном выражении?
if ($strength & 8) {
$consonants .= '@#$%';
}
$сила должна быть числом 0-8. Функция намерена использовать все конкатенации $согласных, где $strength <8. (может объяснить, почему функция не работает).
3 answers
Одиночный &
является побитовым оператором, а двойной &&
является логическим. (т.Е. Биты, которые установлены как в $strength
, так и в 8
, установлены в вашем примере.) Это намного сложнее, чем просто сказать это, и это требует понимания того, как работает двоичный код.
РЕДАКТИРОВАТЬ: Ознакомьтесь с этой статьей для получения дополнительной информации о побитовых операторах.
& является побитовым оператором - он проверяет, установлены ли биты, которые составляют 8. В этом случае, 1000
&
является побитовым оператором. Он объединяет два значения побитово.
Что такое побитовый оператор?
Каждое целое число внутренне представлено в виде числа битов.
1 is 0001
2 is 0010
4 is 0100
8 is 1000
И так далее. значение каждого бита в два раза больше, чем значение предыдущего бита.
Вы можете получить другие числа, комбинируя биты
3 is 0011 (2+1)
5 is 0101 (4+1)
Побитовая операция работает с каждым битом в обеих переменных. &
устанавливает каждый бит в результате равным 1, если он равен 1 в обоих значения, на которых он работает.
9&5 == 1
Потому что
9 == 1001
5 == 0101
----------
1 == 0001
|объединит все 1:
3|5 == 7
3 == 0011
5 == 0101
---------
7 == 0111
Как вы можете его использовать?
Пример:
define('LOG_WARNING',1);
define('LOG_IO',2);
define('LOG_ALIENATTACKS,4);
$myLogLevel = LOG_WARNING | LOG_ALIENATACKS;
Теперь $myLogLevel
представляет собой комбинацию LOG_WARNING
и LOG_ALIENATTACK
. Вы можете проверить это с помощью оператора &
:
if($myLogLevel&LOG_WARNING).... //true
if($myLogLevel&LOG_IO).... //false
if($myLogLevel&LOG_ALIENATTACKS)..../ /true run or your live!!!
Если вы хотите узнать больше об этой теме, выполните поиск битовых флагов и двоичных операций.