Verwirrung bei der Bewertung == und &

7

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.

    
Harikesh 06.08.2013, 08:37
quelle

7 Antworten

23

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

    
phoxis 06.08.2013, 08:42
quelle
7

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.

    
jxh 06.08.2013 08:42
quelle
5

Weil 10 ist 1010 in binär und Ergebnis von 8 == 8 ist 1. so 0001 & 1010 ist falsch.

    
Jeyaram 06.08.2013 08:42
quelle
3
%Vor%     
mohit 06.08.2013 08:44
quelle
2

Weil 8 == 8 wahr ist, was in C gleich 1 ist, ist 1 & 10 gleich 0, was in C falsch ist.

    
jbr 06.08.2013 08:43
quelle
1

Wenn Sie bitweise und (& amp;) arbeiten, ist & amp; 1 (8 == 8) wahr, d. h. 10 & amp; 1 Ergebnisse zu allen 0's. O steht für falsch.

00000000 00001010 & amp; 00000000 00001000 = 00000000 00000000 = Falsch (angenommen Int ist 16 Bit)

    
Mahesh 06.08.2013 08:47
quelle
1

a&8 == 8 wird als a & (8==8) analysiert, was mit a & 1 identisch ist. Da a = 10 ist, hat sogar seine Binärdarstellung eine 0 in der Einheitenposition, so dass das Ergebnis von a & 1 0 ist.

    
Joni 06.08.2013 08:42
quelle