2011-01-16 2 views
13

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

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

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

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

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

+2

Один из них является математической функцией, другой - логическим оператором. – mario

+0

Одним из видов использования может быть поиск нечетного числа: '$ number = [1, 2, 3, 4, 5]; foreach ($ number as $ num) {if ($ num & 1) {echo $ num. "- нечетное число!
"; }}; ' – Ahmad

ответ

12

побитовое | и & и логичное || и && являются совершенно разные.

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

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 
} 
3

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

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

5

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

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

1

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

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

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

0

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

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

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

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

5

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

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

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

if(func1() && func2()) 

если func1() возвращает ложь это не будет беспокоить вызова func2()

if(func1() & func2()) 

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

-1

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

http://www.bitwiseoperatorcalculator.com/

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

18

Побитово полезно для вещей на 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"; 
Смежные вопросы