2016-10-19 5 views
0

Ich versuche, Boolesche Logik und Operatoren zu verstehen. Ich habe dieses Beispiel gefunden, kann aber nicht verstehen, warum dieser Ausdruck zu dem unten gezeigten ausgewertet wird.Warum! (0 || 1 || 0) ist 0?

Sprich: a = 0, b = 1, c = 0

  Expression   Will Evaluate to 
val1 = !(a || b || c);  !(0 || 1 || 0) = !(1) = 0 

Wie ich es sehe, val1 ist nicht a oder nicht b oder nicht c, also warum wertet es nicht 1?

Antwort

0

.... val1 ist kein oder nicht b oder nicht c ...

Nein, das ist falsch. Die 0 || 1 || 0 innerhalb der Klammer wird zuerst ausgewertet. Das Beispiel hat es richtig gemacht.

0

die val1 = 1 1 = !(0 || 1 || 0) 1 = !(1) sagen lassen - weil es der einzige Wert ist, der gleich ist val1 1 = 0 - dann ist es es nicht danach

0

negiert (a oder b oder c) wertet zunächst die oder Operationen, so es ist nicht dasselbe wie (nicht a) oder (nicht b) oder (nicht c).

Tatsächlich ist es das gleiche wie (nicht a) UND (nicht b) UND (nicht c).

Entweder Operand zu einem OR, das falsch ist, wird ein falsches Ergebnis geben, und das NOT umwandelt das zu einem wahren Ergebnis für den Ausdruck als ein Ganzes.

Wie bei der arithmetischen Ganzzahl- oder reellen Zahl kann die Reihenfolge der Operation das Ergebnis stark verändern.

0

Los geht's Schritt für Schritt.

val1 = !(0 || 1 || 0);

Erstens wird 0 || 1 'wahr, wenn mindestens eine von ihnen wahr ist, ansonsten falsch' auf 1, weil || Mittel zu bewerten, und 1 = wahr, 0 = false.

So, jetzt ist es val1 = !(1 || 0); Hier 1 || 0 wird wieder auf 1 bewerten, weil mindestens einer von ihnen ist 1. Jetzt haben wir val1 = !(1); bekommen. ! bedeutet das Gegenteil von dem Eingang, so !(1) = 0.

Wie ich sehe, val1 ist keine oder nicht, b oder c nicht, warum so wertet sie aus, um nicht mehr als 1?

Weil das, was Sie sagen, würde geschrieben werden als . Es ist ganz anders, weil es keine Klammern hat. Klammer bedeutet, "werte alles zuerst in der Klammer aus".