Inkrement und Dekrement
lima-city → Forum → Programmiersprachen → C/C++ und D
anweisung
beitrag
compiler
ergebnis
folgenden zeilen
gedacht
gedankengang
geistige umnachtung
grad
klammern
letzte frage
meinst
relativ
wertigkeit
-
Hoi und noch eine letzte Frage:
bei i = 0
und (i++) + (++i) - (i++)
was m?sste da rauskommen??
Mein Gedankengang: (0+1) + (1+0) - (0+1)
also 1 + 1 - 1 = 1
ist das richtig so? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
i selbst ist nach der Operation 3, das ist ja relativ klar.
Das was du als deinen Gedankengang aufgezeichnet hast, ist bisschen schwer zu verstehen, ich weiss jedenfalls nicht genau, ob du das so meinst, wie es richtig ist. Daher erkl?re ich mal genau was passiert und du kannst dann ja schauen, ob du es dir so gedacht hast.
Angenommen wir haben
int i = 0;
int e;
Wenn du dann schreibst
e = (i++) + (++i) - (i++);
macht der Compiler dieses daraus:
e = i + ++i + i;
i++;
i++;
Die Postinkrementoperatoren werden also erstmal gar nicht beachtet, sondern nur der eine Pr?inkrementoperator.
Daraus ergibt sich dann:
e = 0 + 1 - 0;
Das Ergebnis der Operation wird also 1 sein. Durch die beiden nachfolgenden Inkrementationen von i wird i selbst nach der Operation den Wert 3 haben (+1 w?hrend der Operation und +2 nach der Operation).
?brigens sind die folgenden Zeilen f?r den Compiler genau das Gleiche:
e = (i++) + (++i) - (i++);
e = i++ + ++i - i++;
Das liegt daran, dass die (Pr?-/Post-)Inkrementoperatoren eine h?here Wertigkeit bekleiden als andere Rechenoperatoren. Das gilt nat?rlich auch f?r die beiden Dekrementoperatoren. -
vielleicht bin ich auch grad etwas verwirrt, aber:
0-checka schrieb:
e = (i++) + (++i) - (i++);
macht der Compiler dieses daraus:
e = i + ++i + i;
i++;
i++;
Die Postinkrementoperatoren werden also erstmal gar nicht beachtet, sondern nur der eine Pr?inkrementoperator.
Daraus ergibt sich dann:
e = 0 + 1 - 0;
i wird doch in der 2. klammer auf 1 erhoeht, das ergebnis muesste doch dann
e=iAlt+iNeu-iNeu, d.h. e=0+1-1,
also 0 sein?
-
i=0
(i:=i+1) + (i:=1+i) - (i:=i+1)
(1) + (2) - (3)
i ist dann = 3
Beitrag ge?ndert am 15.07.2005 18:11 von gsk -
Mal in Zahlen:
e = i++ + ++i - i++;
entspricht (angenommen Wert von i vor der Anweisung == 0)
e = 1 + 1 - 1;
=> e == 1
=> i == 3
Weil:
++i vor (i wird 1) Ausf?hrung der Anweisung und dann doppelte Ausf?hrung von i++ nach (i wird 3) der Anweisung.
gsk schrieb:
i=0
(i:=i+1) + (i:=1+i) - (i:=i+1)
(1) + (2) - (3)
i ist dann = 3
Bis auf das i == 3 ist der Rest v?llig falsch. -
oh man, da hatte ich wohl geistige umnachtung :)
also nochmal:
vereinbart:
i = 0;
e = 0;
e = (i++) + (++i) - (i++);
e = ( 1 ) + ( 1 ) - ( 1 );
danach ist
i = 3
e = 1
Beitrag ge?ndert am 16.07.2005 14:21 von gsk -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage