Operatoren Seiteneffekte bei Auswertung von Ausdrücken

Hallo zusammen,

Folgende Aufgabe
ist gegeben:

Werten Sie die folgenden Ausdr¨ucke aus. Die Variable i soll zu Beginn den Wert 0 haben. Welchen Wert besitzt i jeweils nach Auswertung des Ausdrucks aufgrund der Seiteneffekte?
i) true | i++==7
ii) true || i++==7
iii) true | i++==7 || i++==7
iv) true || i++==7 | i++==7
v) true | i++==7 | i++==7

Die Lösung dazu lautet:
i) true, Wert von i: 1
ii) true, Wert von i: 0
iii) true, Wert von i: 1
iv) true, Wert von i: 0
v) true, Wert von i: 2

Frage:
Ich verstehe nicht, wie man auf die Werte von i kommt? Bei i) müsste es doch zum Beispiel i=6 sein oder?

Vielen Dank für Eure Hilfe!
Viele Grüße
 
Das ODER gibt es als Kurzschlussoperator (||) oder Nicht-Kurzschlussoperator (|), d.h. als Kurzschlussoperator wird der nachfolgende Teil der Verknüpfung NICHT mehr berücksichtigt, wenn der erste Teil bereits erfüllt ist.

Beim i++==7 musst du berücksichtigen, dass es sich aus einer Kombination von einer Zuweisung und einem Vergleich handelt:
(i = i +1) == 7
Was im Übrigen false ergibt, weil 1 != 7
 
Zuletzt bearbeitet:
Das ODER gibt es als Kurzschlussoperator (||) oder Nicht-Kurzschlussoperator (|)
Keine Ahnung was du mit Kurzschluss und nicht Kurzschluss meinst, aber das || ist ein logisches ODER, d.h. es wird geprüft ob der vordere Teil der Bedingung wahr ist oder der hintere. Richtig ist wenn der vordere schon wahr ist dann spielt beim ODER der hintere Teil keine Rolle mehr.
Das | ist ein bitweises ODER, d.h. jedes Bit des linken Operanden wird mit dem entsprechenden Bit des rechten Operanden per ODER verknüpft.
 
Keine Ahnung was du mit Kurzschluss und nicht Kurzschluss meinst, aber das || ist ein logisches ODER, d.h. es wird geprüft ob der vordere Teil der Bedingung wahr ist oder der hintere. Richtig ist wenn der vordere schon wahr ist dann spielt beim ODER der hintere Teil keine Rolle mehr.
Das | ist ein bitweises ODER, d.h. jedes Bit des linken Operanden wird mit dem entsprechenden Bit des rechten Operanden per ODER verknüpft.

Aus der Java 8 Spezifikation:
15.22.2. Boolean Logical Operators &, ^, and |
When both operands of a &, ^, or | operator are of type boolean or Boolean, then the type of the bitwise operator expression is boolean. In all cases, the operands are subject to unboxing conversion (§5.1.8) as necessary.

For &, the result value is true if both operand values are true; otherwise, the result is false.

For ^, the result value is true if the operand values are different; otherwise, the result is false.

For |, the result value is false if both operand values are false; otherwise, the result is true.
 
Ich glaube er wollte damit sagen, dass zwar beide Operatoren wie ein ODER wirken, aber nur bei einem die Inkrementierungen noch zur Ausführung kommen, falls der Wahrheitswert des Gesamtausdrucks schon vorzeitig fest steht.
Ich hatte angenommen, dass wäre ein gängiger Begriff. Ich kenne den jedenfalls schon aus anderen Programmiersprachen. In der "Insel" wird das auch so bezeichnet.
https://de.wikipedia.org/wiki/Kurzschlussauswertung
 

Zurück
Oben