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