Auswertung von Operatoren, Precedence
-
Guten Tag ich würde gerne wissen was in diesem Ausdruck passiert:
a = b = c = 0; erg = a && b || c;Also wie er gelesen und wie er ausgewertet wird.
= hat ja die niedrigste precedence also wird zuerst berücksichtigt und zuletzt "beendet", ich dachte immer der operator mit dem höchsten vorrang wird zuerst gelesen, aber das ist wohl nicht so... wenn ich es von links nach rechts lesen würde: a ist true weil nicht 0 ( false ) ( direkt inkrementiert ) und b genauso, daswegen gibt && true an erg zurück, also wird erg = true, aber wie ist es denn richtig schritt für schritt wäre gut
danke im vorraus
-
Das sind zwei Ausdrücke. Und wo wird da was inkrementiert?
-
Erster Ausdruck:
a = b = c = 0;a wird gleich dem gesetzt, was rechts steht. Rechts steht
b = c = 0. Das heißt, b wird das, was rechts steht. Rechts stehtc = 0. Das heißt, c wird das, was rechts steht. Rechts steht 0. Somit wird c auf 0 gesetzt, somit auch b, somit auch a.Zweiter Ausdruck:
erg = a && b || c;erg wird das, was rechts steht. Rechts steht
a && b || c. Mit expliziten Klammen nach der Operatorpriorität ist dies das gleiche wie(a && b) || c, da && die höhere Priorität hat. Somit wird zunächst(a && b)ausgewertet. Da a schon 0 ist, wird b gar nicht mehr angeguckt (Stichwort: short-circuit-evaluation) und der Ausdruck ist sofort false. Somit steht nochfalse || c. Da false nicht true ist, muss die rechte Seite betrachtet werden. c ist aber auch 0, daher ist der ganze Ausdruck auf der rechten Seite false und dies wird erg zugewiesen.
-
so ein mist, das forum hat die ++ gelöscht o.o der richtige code:
a = b = c = 0; erg = ++a && ++b || ++c;
-
so wie ich das verstehe:
c, b, a = 0
++a true, ++b true, && ist true, also wäre es true || ++c; da aber || nur ein true benötigt, || = true und erg = true ?