Search code examples
pythonbitwise-operatorslogical-operators

Logical vs. bitwise operator AND


I don’t understand the difference between & and and, even if I read some other questions about it.

My code is:

f=1
x=1

f==1 & x==1
Out[60]: True

f==1 and x==1
Out[61]: True

f=1
x=2

f==1 and x==2
Out[64]: True

f==1 & x==2
Out[65]: False

Why is it the second & False, whereas the first is True?


Solution

  • The issue is that & has higher operator precedence than ==.

    >>> (f == 1) & (x == 2)
    True
    >>> f == (1 & x) == 2
    False
    

    Perhaps this seems unintuitive, but & is really meant to be used between numbers for particular kinds of calculations:

    >>> 3 & 5
    1
    

    so it has similar precedence to operators like + and *, which sensibly should be evaluated before ==. It's not meant to be used in a similar manner to and at all.