Warum gilt die folgende Aussage:
%Vor%gibt false (0) zurück?
Ich weiß, dass ==
mehr Vorrang hat als &
, aber es sollte trotzdem überprüft werden, ob 8 == 8
und es sollte wahr ausgewertet haben, aber seine Bewertung als falsch.
Kann mir jemand bitte durch Argumentation helfen.
a & 8 == 8
ist a & (8 == 8)
, weil ==
eine höhere Priorität hat als &
( hier )
So 8 == 8
ist 1
und a = 10
was in binary
1010
ist
Also
%Vor% Interessante Tatsache :
Obwohl false eine Null ist und true ein Wert ungleich Null in C Language ist. Wenn der Gleichheitsoperator jedoch als wahr bewertet wird, garantiert er, dass andernfalls der Wert 1
und 0
ausgewertet wird. Referrer C99 Abschnitt 6.5.9 Absatz 3
Das Ergebnis von 8 == 8
bei Konvertierung in int
ist 1
.
a & 8 == 8
wird somit a & 1
, was wahr ist, wenn das niedrigstwertige Bit von a
gesetzt ist. Dies gilt nur für a
ist ungerade.
Da a
10 ist, ist a & 1
0
, da 10 gerade ist.
Das &
ist in diesem Fall ein bitweises und und kein logisches - und . Eine logische - und hätte dazu geführt, dass der Ausdruck a && 8 == 8
wahr ist, da beide Seiten des &&
-Operators nicht Null wären.
Jedoch bitweise - und erzeugt ein Ergebnis, bei dem "jedes Bit im Ergebnis genau dann gesetzt ist, wenn jedes der entsprechenden Bits in den konvertierten Operanden gesetzt ist" (C.11 §6.5.10 ¶4). Für eine gerade Zahl ist das 1
s-Bit 0
, also ist das Ergebnis von bitweise - und mit 1
0
.
Da das Ergebnis der bitweisen - und 0
ist, wird der Ausdruck als falsch behandelt.
Tags und Links c evaluation operator-precedence