Логический и побитовый - PullRequest
       17

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

4 голосов
/ 07 декабря 2011

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

Ответы [ 3 ]

7 голосов
/ 07 декабря 2011

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

if x and y: # logical operation
   ...
z = z & 0xFF # bitwise operation
1 голос
/ 28 февраля 2012

Логические операторы используются для логических значений, поскольку true равно 1, а false равно 0. Если вы используете (двоичные) числа, отличные от 1 и 0, то любое число, отличное от нуля, становится единицей.Пример: int x = 5; (101 в двоичном формате) int y = 0; (0 в двоичном) В этом случае при печати x && y будет напечатано 0, потому что 101 был изменен на 1, а 0 был сохранен на нуле: это то же самоекак печать true && false, которая возвращает false (0).С другой стороны, побитовые операторы выполняют операцию с каждым битом двух операндов (отсюда и термин «побитовый»).Пример: int x = 5; int y = 8; печать x | y (побитовое ИЛИ) будет рассчитывать это: 00 0101 (5)| 1000 (8)-----------= 1011 (11)Это означает, что будет напечатано 11.

0 голосов
/ 07 декабря 2011

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

&& || == !

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

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

Битовые операторы:

& | ^ ~

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

~011 = 100
0101 & 0011 = 0001
...