Using bits and Boolean values
As noted earlier, the bit-oriented operators &
, |
, ^
, and ~
have nothing to do with Python's actual Boolean operators and
, or
, not
, and if-else
. We'll look at Boolean values, logic operators, and related programming in Chapter 5, Logic, Comparisons, and Conditions.
If we misuse the bit-oriented operators &
or |
in place of a logical and
or or
, things may appear very peculiar:
>>> 5 > 6 & 3 > 1 True >>> (5 > 6) & (3 > 1) False
The first example is clearly wrong. Why? This is because the &
operator has relatively high priority. It's not a logical connective, it's more like an arithmetic operator. The &
operator is performed first: 6&3
evaluates to 2. Given this, the resulting expression, 5 > 2 > 1
, is True
.
When we group the comparisons to perform them first, we'll get a False
for 5>6
, and a True
for 3>1
. When we apply the &
operator the result will be False
, which is what we expected. Using bit operators inappropriately as logical connectives can work if we use parentheses to be sure that the bit operators are performed last. It's a very bad idea, however.
It's easier, clearer, and altogether better to use the proper Boolean operators shown in Chapter 5, Logic, Comparisons, and Conditions.