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.


Log in to reply