2016-03-30 22 views
3

Ich kann den Unterschied zwischen & und "und" nicht verstehen, auch wenn ich einige andere Fragen darüber lesen.Python: logische oder bitweise Operator UND

Mein Code ist:

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 

Warum ist es der zweite "&" falsch, sondern die erste wahr ist?

+0

sollten Sie dies http://stackoverflow.com/a/3845032/4941927 lesen – Milor123

Antwort

6

Das Problem ist, dass & höhere Priorität hat als ==.

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

Vielleicht scheint dies nicht intuitiv, aber & ist wirklich bedeutet für bestimmte Arten von Berechnungen zwischen den Zahlen verwendet werden:

>>> 3 & 5 
1 

so hat es ähnlich Vortritt Operatoren wie + und *, die sinnvollerweise soll vor == ausgewertet werden. Es ist nicht dazu gedacht, in ähnlicher Weise wie and überhaupt verwendet zu werden.

1

Das Problem ist, dass '&' höhere Priorität als == hat. Wenn Sie Ihre letzte Aussage wie setzen:

(f==1) & (x==2) 

Sie erhalten Ihr gewünschtes Ergebnis.

1

Im zweiten Fall, Ihr Code:

f == (1 & x) == 2 

1 & 2 0:

00000001 
00000010 & 
-------- 
00000000 

So Ihre Endabrechnung aussieht:

1 == 0 == 2 

Welche False ist.