I am confused as to when I should use a Boolean vs Bitwise operators
and vs &, or vs |
Could someone enlighten me as to when do i use each and when will using one over the other affect my results?
I am confused as to when I should use a Boolean vs Bitwise operators
and vs &, or vs |
Could someone enlighten me as to when do i use each and when will using one over the other affect my results?
Here are a couple of guidelines:
The short-circuiting behaviour is useful in expressions like this:
This would not work correctly with the bitwise
&
operator because both sides would always be evaluated, givingAttributeError: 'NoneType' object has no attribute 'foo'
. When you use the booleanand
operator the second expression is not evaluated when the first is False. Similarlyor
does not evaluate the second argument if the first is True.The general rule is to use the appropriate operator for the existing operands. Use boolean (logical) operators with boolean operands, and bitwise operators with (wider) integral operands (note: False is equivalent to 0, and True to 1). The only "tricky" scenario is applying boolean operators to non boolean operands.
Let's take a simple example, as described in [SO]: Python - Differences between 'and' and '&' [duplicate]:
5 & 7
vs.5 and 7
.For the bitwise and (&), things are pretty straightforward:
For the logical and, here's what [Python 3]: Boolean operations states:
Example:
Of course, the same applies for | vs. or.