问题
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
?
回答1:
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.
回答2:
The problem is that '&' has higher priority than ==
. If you put your last statement like:
(f==1) & (x==2)
You will get your desired result.
回答3:
In the second case, your code is:
f == (1 & x) == 2
1 & 2
is 0:
00000001
00000010 &
--------
00000000
So your final statement looks:
1 == 0 == 2
Which is False
.
来源:https://stackoverflow.com/questions/36310789/logical-vs-bitwise-operator-and