Wenn (!(-1)) zu true oder false ausgewertet in C?
Ich weiß, dass 0 und NULL zu FALSE ausgewertet, auf Ihre eigenen, und ich weiß, dass eine negative ganze Zahl oder eine positive ganze Zahl zu TRUE ausgewertet, auf Ihre eigenen.
Mein Verständnis ist, dass der Betrieb NICHT passieren wird, nachdem die Auswertung des Ausdrucks, so if (-1)
bewerten zu TRUE
, dann die Anwendung, die !
operand bedeutet NOT TRUE
entspricht FALSE
. Ist dies die richtige Reihenfolge der Operationen und ist es richtig, dass if (!(-1))
bewerten zu FALSE
?
- Haben Sie es ausprobiert?
- Versuchen Sie es selbst,
- Suche auch nach einer Antwort in Bezug auf die Reihenfolge von Operationen, nicht nur das Endergebnis.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Auswertung der
if (!(-1))
ausgearbeitet werden kann durch das denken über die Betreiber angigkeiten.Erstens der unäre
-
angewandt wird, 1 ergibt ein integral-1
. Dann wird dieser Wert logisch negiert durch die!
. Dies beinhaltet die einstürzenden-1
in einen logischen Wert. Die Regel für diese in C ist nett und einfach für Integrale Typen: 0 ist falsy und alles andere ist truthy.Daher
-1
ist truthy und wenn die logische negation geschieht, erhalten wir false.Daher diese Aussage ist portabel falsch.
In standard-C, werden alle nicht-null (positiv/negativ) Wert TRUE.
So, (-1) als WAHR ausgewertet und !(-1) der-natürlich als FALSCH ausgewertet. Daher, wenn (!(-1)) wird zu FALSE ausgewertet.
!
die Frage ist nur nicht, was sein Wert ist, aber wenn es vergleicht gleich0
.