2016-06-16 11 views
-2

Ich weiß, dass 0 und NULL auf FALSE selbst auswerten und ich weiß, dass eine negative ganze Zahl oder eine positive Ganzzahl auf TRUE allein auswerten.Ist if (! (- 1)) in C wahr oder falsch?

Mein Verständnis ist, dass die NOT-Operation nach der Auswertung des Ausdrucks geschehen wird, so if (-1)-TRUE bewerten wird, dann wird der ! Operand bedeutet NOT TRUE Anwendung, die FALSE entspricht. Ist dies die richtige Reihenfolge der Operationen und ist es korrekt, dass if (!(-1)) zu FALSE auswertet?

+2

Haben Sie es versucht? –

+0

[Versuchen Sie es] (http://coliru.stacked-crooked.com/a/f1471249b698860a) –

+0

Suche auch nach einer Antwort in Bezug auf die Reihenfolge der Operationen, nicht nur das Endergebnis. –

Antwort

4

Die Auswertung von if (!(-1)) kann durch Nachdenken über die Operatorvorgaben ausgearbeitet werden.

Zuerst wird das unäre auf 1 angewendet, was ein integrales -1 ergibt. Dann wird dieser Wert vom ! logisch negiert. Dabei wird -1 zu einem logischen Wert zusammengeführt. Die Regel dafür in C ist nett und einfach für ganzzahlige Typen: 0 ist falsch und alles andere ist truthy.

Daher ist -1 truthy und wenn die logische Negation passiert, werden wir falsch.

Daher ist diese Aussage portabel falsch.

+0

also ist eine '!' Operation immer die letzte angewendet, in Bezug auf die Reihenfolge? –

4

Im Standard C ist jeder Wert ungleich Null (positiv/negativ) TRUE.

Also, (-1) ausgewertet als TRUE und,! (- 1) natürlich ausgewertet als FALSE. Daher wird (! (- 1)) zu FALSE ausgewertet.

+1

Detail: "Im Standard C ist jeder Wert ungleich Null (positiv/negativ) TRUE." -> schließen. Verschiedene Objekte haben negative, positive, Null-, NAN-, Nullzeiger-, Nicht-Nullzeiger-, komplexe usw. Werte. Für '!' Ist die einzige Frage nicht, was sein Wert ist, aber wenn _ gleich 'auf' 0 '_kompariert wird. – chux