The compiler uses precedence and associativity to create the following expression tree: (((a * ((a++) - (--b))) * a) * b)
Then at runtime, order of evaluation is always left to right: ...
How do you apply it?
in this case (after respecting parens, precedence, and assoc), requires that the left operand be evaluated before the right operand.
T o evaluate an expression, the only important thing is order of evaluation. Precedence and associativity don't have anything to do with expression evaluation.