klammerung
-
kann mir jemand erklären warum :
x = -4 * i++ – 6 % 4;so geklammert wird:
x = ( ((-4) * (i++)) – (6 % 4) )ich hätte angefangen i++ zu klammern weil es den höchsten vorrang hat, dann * / % von rechts nach links, weil es den nächst höchsten hat dann - weil niedrigeren vorrang aber es verwirrt mich einfach ..
-
Das unaere '-' hat hoehere Prioritaet als das binary '*'.
Zum Beispiel:Bei '-1' ist es ein unaeres Minus. Bei '1 - 2' ist es ein binaeres Minus.
Siehe hier die Operator Precedence Tabelle.
-
aber es verwirrt mich einfach ..
Was verwirrt dich? Erklär doch was du nicht verstehst, dann kann man wenigstens eine Frage beantworten.
-
ich verstehe nicht welche klammern hier jetzt zuerst gerechnet werden ... ich habe keine ahnung wie ich das einklammern solte...
-
Fragä schrieb:
ich verstehe nicht welche klammern hier jetzt zuerst gerechnet werden
Das ist eine tolle Frage, die man leider nicht beantworten kann, da der C++ Standard die Auswertungsreihenfolge nicht definiert. Ergo bedeutet das, dass die
Operator Precedencenichts mit der Auswertungsreihenfolge zu tun hat. DieOperator Precedencesagt nur, welche Operanden ein Operator an sich bindet.Bsp:
-4 * i++ – 6 % 4++ Postfixhat die höchste Priorität (bzgl. deines Beispiels):
4 * (i++) – 6%4
-
- unary minushat die zweithöchste Priorität:
(-4) * (i++) – 6%4 -
* und %haben die dritthöchste Priorität:
((-4) * (i++)) – (6%4) -
- subtractionhat die vierthöchste Priorität:
( ((-4) * (i++)) – (6%4) )
So: Wie gesagt, ist die Auswertungsreihenfolge nicht definiert. D.h., ob nun zuerst
((-4) * (i++))oder(6%4)gerechnet wird... man kann es nicht sagen, es ist undefiniert.
-
postfix vor präfix
präfix vor binären operatoren
binäres "punkt" (mal, durch) vor binärem "strich" (plus, minus)das mit den präzedenzen steuert aber nur die klammerung, also, WAS gerechnet wird, und nicht in welcher Reihenfolge die Teilausdrücke ausgewertet werden. Natürlich bedingt das eine ein bisschen das andere, aber es gibt noch genug Freiheiten. Bei (a+b)*(c+d) kann entweder zuerst a+b oder c+d ausgerechnet werden. Du verstehst..?