Когда следует использовать побитовый оператор?

Я читаю следующие вопросы о переполнении стека, и я понимаю различия между поразрядными и логическими.

  • Разница между & и && в PHP

  • Ссылка. Что означает этот символ в PHP?

Однако ни один из них не объясняет, когда я должен использовать поразрядное или логическое.

Когда следует использовать побитовые операторы, а не логические, и наоборот?

В какой ситуации мне нужно сравнивать пополам?

Я не спрашиваю о различиях, но я спрашиваю ситуацию, когда вам нужно использовать побитовые операторы.

Побитовое | и & и логические || и && совершенно разные .

Побитовые операторы выполняют операции над битами двух чисел и возвращают результат. Это означает, что это не да или нет. Если они используются в условных выражениях, они часто используются как часть логических сравнений. Например:

 if ($x & 2 == 2) { // The 2^1 bit is set in the number $x } 

Логические операторы сравнивают два (или более) условия / выражения и возвращают true или false. Вы используете их чаще всего в условных выражениях, например, if и в while . Например:

 if ($either_this || $or_this) { // Either expression was true } 

Побитово полезно для вещей на PHP, как и все остальное.

Как насчет значения, которое может включать несколько состояний одновременно (возможно, разрешения)?

 <?php # must double them like this for it to work. const STATE_FOO = 1; const STATE_BAR = 2; const STATE_FEZ = 4; const STATE_BAZ = 8; # set state to foo and bar $state = STATE_FOO | STATE_FEZ; echo "What's the value: $state\n"; echo "Is foo state on? ".(bool)($state & STATE_FOO)."\n"; echo "Is bar state on? ".(bool)($state & STATE_BAR)."\n"; echo "Is fez state on? ".(bool)($state & STATE_FEZ)."\n"; echo "Is baz state on? ".(bool)($state & STATE_BAZ)."\n"; echo "Is foo and fez state on? ".($state == (STATE_FOO | STATE_FEZ))."\n"; 

В большинстве случаев вы, вероятно, захотите использовать логические операторы. Они используются для объединения логических условий, как правило, для управления потоком программы, например ($isAlive && $wantsToEat) .

Побитовые операторы используются, когда вы хотите выполнять операции поэтапно на основе двоичных представлений целых чисел. например (5 & 3) == 7 . Как предполагали другие, в этом случае обычно не так много призывов в виде приложения, которое, как правило, записывается на PHP (хотя есть языки более низкого уровня, например C).

Побитовые операторы специально используются в случае представления двоичных значений.

 echo '0110011010' & '0101001001'; //0100001000 

Логические операторы наиболее предпочтительны для сравнения и немного быстрее, чем побитовый оператор в случае операций AND и XOR .

 if(func1() && func2()) 

if func1() возвращает false, это не func2() вызов func2()

 if(func1() & func2()) 

Вызовите обе функции независимо от возвращаемых значений.

Побитовые операторы полезны при манипулировании битами числа. Послушайте. В противном случае вы должны использовать логические операторы. Также логические операторы закорочены. Например, если у вас есть a && b а afalse , b не оценивается.

Отказ от ответственности: я исхожу из Java- фона, но я думаю, что в PHP это одно и то же.

Это два очень разных оператора.

Если вы хотите, чтобы два условия одновременно были истинными, вы используете логический && . Например, я хочу распечатать «с днем ​​рождения», только если сегодня день рождения человека и у него есть деньги на счете. Это используется всякий раз, когда мы хотим выполнить композицию из двух или более условий, в основном в операторах if и условиях цикла (хотя и не исключительно).

Если вы хотите выполнять побитовые операции (которые в повседневном программировании PHP намного реже), вы используете побитовое & . Это гораздо реже, и вы можете выполнять побитовое маскирование (я сомневаюсь, однако), поэтому вам может newAttribute = attribute1 & attribute2; только результат, который представляют оба целых числа, и в этом случае вы можете сказать newAttribute = attribute1 & attribute2; ,

Ну, предполагая, что существует $x = (false && some_function()); , здесь значение $x будет установлено без вызова функции some_function() поскольку первое значение было FALSE.

Но что, если вам нужно было все время называть эту функцию? Используйте $x = (false & some_function()); ,

Другими словами, & использует БОЛЬШУЮ обработку, чем &&, только потому, что && не пробегает все значения, чтобы их проверить. Если он обнаружил одно значение как false, оно вернет его, не глядя на другие значения.

И в логических операциях используйте оператор && поскольку он используется для возврата значения логической операции, где & используется для установки значения, и в выражении if он всегда возвращает true.

Если вы хотите узнать больше, как это работает, ознакомьтесь с этим сайтом:

http://www.bitwiseoperatorcalculator.com/

Исходя из PHP, я никогда раньше не использовал его, но просто читал для удовольствия этот сайт дает простые объяснения!