Interpretation von Ausdruck
-
hallo,
ich habe mal folgendes erstellt:
int a = 4; int b = 3; int c = a --- b; int d = (a--)-b; int e = a-(--b); printf("c: %d\n", c); printf("d: %d\n", d); printf("e: %d\n", e);
Mit dem GCC compiliert und ausgeführt bekomme ich folgendec Ausgabe:
c: 1 d: 0 e: 0
Ich hätte eignetlich vermutet, dass eine der Varianten d, e auch eine 1 liefert.
Weiß jemand wie das "---" interpretiert wird?
-
anno schrieb:
Weiß jemand wie das "---" interpretiert wird?
a --- b
entspricht(a--) - b
Kanns sein, dass du in deinen Überlegungen einfach nur vergessen hast, dass a, nachdem c berechnet wurde, den Wert 3 hat...
-
dann sollte aber ja auch das gleiche dabei herauskommen.
-
anno schrieb:
Ich hätte eignetlich vermutet, dass eine der Varianten d, e auch eine 1 liefert.
Warum? 3-3, 2-2 ist beides 0.
Weiß jemand wie das "---" interpretiert wird?
Immer von links nach rechts so lange wie es geht (greedy), dh -- -
-
wenn a --- b entspricht (a--) - b , dann müsste aber zumindest bei c und d das gleiche herauskommen
-
anno schrieb:
wenn a --- b entspricht (a--) - b , dann müsste aber zumindest bei c und d das gleiche herauskommen
Kommt es doch auch, bei beiden 0.
Denn nach c ist a 3 und b 3.
Dann ist a 2 und b 2.
-
@anno: Nein, a ändert wegen -- dazwischen seinen Wert.
@Nathan: Das ist die Erklärung für d, e und nicht für c, d.
-
int a = 4; int b = 3; int c = a-- - b; // a = 4, b = 3 int d = a-- - b; // a = 3, b = 3 int e = a- --b; // a = 2, b = 3 // a = 2, b = 2
Beachte, dass Postinkrement nach der Zeile ausgeführt wird, Preinkrement noch in der Zeile.
-
Die letzte (Code-)Zeile ist falsch, da wird das b prädekrementiert, ist also schon 2. Die letzte Kommentarzeile ist dafür aber richtig ;).
-
Skym0sh0 schrieb:
Die letzte (Code-)Zeile ist falsch, da wird das b prädekrementiert, ist also schon 2. Die letzte Kommentarzeile ist dafür aber richtig ;).
Der Kommentar bezieht sich auf den Wert der Variablen in der Codezeile, natürlich nicht in Kombination mit dem Dekrement.