Frage zur Rangordnung grundlegender Operatoren



  • Hallo zusammen,
    ich habe eine Frage zu folgendem Code:

    int x=2;
    x*=3+4;
    

    Warum kommt da eigentlich 14 raus und nicht 10. Sind da unsichtbare Klammern um 3+4?

    Vielen Dank
    lg, freakC++



  • freakC++ schrieb:

    Warum kommt da eigentlich 14 raus und nicht 10. Sind da unsichtbare Klammern um 3+4?

    So gesehen ja. Die Zuweisungsoperatoren (auch arithmetische wie *= ) haben niedrige Priorität, was auch gut so ist.



  • Ok, vielen Dank! Das wars schon

    lg, freakC++



  • freakC++ schrieb:

    int x=2;
    x*=3+4;
    

    Warum kommt da eigentlich 14 raus und nicht 10. Sind da unsichtbare Klammern um 3+4?

    Ja, genauso wie bei

    int x=2;
    x=3+4;
    

    Da wird ja auch erst 3+4 gerechnet und dann erst zugewiesen.

    Anders geklammert, also

    int x=2;
    (x*=3)+4;
    

    frißt es der Compiler zwar auch, aber dann wird nur x=6 rauskommen und das anschließende +4 wirkt nicht mehr als Zuweisung, sondern es wird nur nochmal schnell 6+4=10 gerechnet und die 10 wird sofort wieder vergessen.



  • Und selbst wenn *= eine höhere Priorität als = hätte, hätte x danach den Wert 6 und nicht 10.



  • Also wenn ich mal zusammenfassen darf, bedeutet das alles in der Rangordnung:

    1.) Arithmetische Operatoren
    2.) Vergleichsoperatoren
    3.) Zuweisungsoperatoren

    oder ein bischen genauer:

    1.1) ++, --, +,- (Vorzeichen)
    1.2) /, *, %
    1.3) +, - (Addition, Subtraktion)

    2.1) <, >, <=, >=
    2.2) ==, !=

    3.1) =, =*, =/, =+, =- //Stimmt das hier??

    Vielen Dank
    lg, freakC++

    PS.: @ SG1: echt?? 2*3+4=10



  • Wenn du bei Google "C++ Operator Priorität" eingibst, findest du massenhaft Tabellen. In einem guten Buch sollte sowas allerdings auch stehen.



  • Das weiß ich auch 😉 aber ich wollte doch mal ausm Kopf die Prioritäten rausschreiben und sie schnell bestätigen lassen!!

    Naja, dann suche ich mir halt eine Tabelle!

    Vielen Dank
    lg, freakC++



  • Sogar in jedem schlechten. In guten Büchern steht eher drin, dass es eigentlich keine Operatorpriorität an sich gibt, sondern nur eine Grammatik, aus der die Priorität in verschiedenen Situationen implizit hervorgeht 😉



  • Bashar schrieb:

    Sogar in jedem schlechten. In guten Büchern steht eher drin, dass es eigentlich keine Operatorpriorität an sich gibt, sondern nur eine Grammatik, aus der die Priorität in verschiedenen Situationen implizit hervorgeht 😉

    Klugscheisser



  • Kinder,
    wir streiten uns schon wieder um ein so blödes Thema! Ich wollte ursprünglich nur eine Kleinigkeit zu den grundlegenden Operatoren wissen...

    Wir haben uns doch alle lieb 😃 .

    lg, freakC++



  • wcent0r schrieb:

    Bashar schrieb:

    Sogar in jedem schlechten. In guten Büchern steht eher drin, dass es eigentlich keine Operatorpriorität an sich gibt, sondern nur eine Grammatik, aus der die Priorität in verschiedenen Situationen implizit hervorgeht 😉

    Klugscheisser

    Warum Klugscheisser? - Das steht fast genau so im Standard:

    S.65 Fussnote schrieb:

    The precedence of operators is not directly specified, but it can be derived from the syntax.



  • drakon schrieb:

    wcent0r schrieb:

    Bashar schrieb:

    Sogar in jedem schlechten. In guten Büchern steht eher drin, dass es eigentlich keine Operatorpriorität an sich gibt, sondern nur eine Grammatik, aus der die Priorität in verschiedenen Situationen implizit hervorgeht 😉

    Klugscheisser

    Warum Klugscheisser? - Das steht fast genau so im Standard:

    S.65 Fussnote schrieb:

    The precedence of operators is not directly specified, but it can be derived from the syntax.

    Weil das Korinthenkackerei ist. Niemand leitet die Operatorpräzedenten aus der Grammatik ab, sondern schaut einfach in Tabellen nach.



  • Deshalb der Smiley, aber das Trollkommando muss in diesem Forum ja immer alles so bierernst nehmen.



  • hm. gibts noch fragen zur Operator-Rangordnung?



  • Nein, von meiner Seite ist erstmal alles klar!

    Vielen Dank
    lg, freakC++


Anmelden zum Antworten