PHP, если оператор вопрос (& оператор) - PullRequest
4 голосов
/ 08 января 2011

Я использую функцию, которую я нашел в Интернете. Что означает & в этом условном выражении?

if ($strength & 8) { $consonants .= '@#$%'; }

$ сила должна быть числом 0-8. Функция намеревается использовать все конкатенации $ созвучных, где $ сила <8. (может объяснить, почему функция не работает). </p>

Ответы [ 3 ]

4 голосов
/ 08 января 2011

Единичный & является побитовым оператором, а двойной && является логическим. (То есть биты, которые установлены как $strength, так и 8, установлены в вашем примере.) Это намного сложнее, чем просто сказать это, и требует понимания того, как работает двоичный файл.

РЕДАКТИРОВАТЬ: Проверьте эту статью для получения дополнительной информации о побитовых операторах.

3 голосов
/ 08 января 2011

& - побитовый оператор. Он объединяет два значения поразрядно.

Что такое побитовый оператор?

Каждое целое число внутренне представлено в виде количества битов.

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!!!

Если вы хотите узнать больше о теме, ищите битовые флаги и двоичные операции.

3 голосов
/ 08 января 2011

& является побитовым оператором - он проверяет, установлены ли биты, всего 8. В этом случае 1000

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...