Python Essentials
上QQ阅读APP看书,第一时间看更新

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.