Логические побитовые против


Чем отличаются логические операторы and, or и побитовые аналоги &, | в употреблении? Есть ли разница в эффективности различных решений?

3 4

3 ответа:

Логические операторы работают с логическими значениями, А побитовые операторы-с целочисленными битами. Перестаньте думать о производительности и используйте их для того, для чего они предназначены.

if x and y: # logical operation
   ...
z = z & 0xFF # bitwise operation

Логические операторы

Используются для булевых чисел, так как true равно 1 и false равно 0. Если вы используете (двоичные) числа, отличные от 1 и 0, то любое число, которое не равно нулю, становится единицей.
Ex: int x = 5; (101 в двоичном коде) int y = 0; (0 в двоичном коде) в этом случае печать x && y будет печатать 0, потому что 101 был изменен на 1, а 0 остался на нуле: это то же самое, что печать true && false, которая возвращает false (0).

С другой стороны, побитовые операторы выполняют операцию над каждым отдельным битом два операнда (отсюда и термин "побитовый").
Ex: int x = 5; int y = 8; печать x | y (побитовое или) вычислит это:
000101 (5)
| 1000 (8)
-----------
= 1011 (11)
это означает, что он будет печатать 11.

Логические операторы таковы:

&& || == !

Они позволяют оперировать логическими значениями, например:

(true || false) // evaluates to true
(!true) // evaluates to false

Побитовые операторы таковы:

& | ^ ~
Они позволяют работать с двоичными битами, например:
~011 = 100
0101 & 0011 = 0001