Precedence in C
Ambiguity can arise when combining operators. Parenthesis are recommended for making an expression unambiguous, but what happens, for instance, when we have:
x = 2 + 3 * 4;
or even worse,
int x=2; int y=5; int z = x+++y;
cout << x << " " << y << " " << z << endl;
Should the "x+++y" be interpreted as "(x++) + y" or as "x + (++y)". Note that in both cases the value 8 will be stored in z, but in "(x++) + y" x is changed, while in "x + (++y)" y is changed instead. Here is a precedence chart (note that we haven't yet seen many of the operators shown below):
Operators Associativity Description () [] -> . ++ -- Left to right Postfix ++ and -- ! ++ -- + - * & (type) sizeof Right to left Unary +, -, and *; Prefix ++ and -- * / % Left to right Multiplicative + - Left to right Binary +, - << >> Left to right Shift binary numbers < <= > >= Left to right Relational == != Left to right Equality / Inequality & Left to right Bitwise and ^ Left to right Bitwise xor | Left to right Bitwise or && Left to right Logical and || Left to right Logical or ?: Left to right Conditional (ternary) = += -= *= /= %= &= ^= |= <<= >>= Right to left Assignment , Left to right Sequential evaluation
I highly recommend that you use parentheses to disambiguate your expressions.