Precedence of operators
The precedence of operators determines which operator is executed first if there is more than one operator in an expression.
Let us consider an example:
int x = 5 - 17* 6;
In C, the precedence of * is higher than - and =. Hence, 17 * 6 is evaluated first. Then the expression involving - is evaluated as the precedence of - is higher than that of =.
Here's a table of operators precedence from higher to lower. The property of associativity will be discussed shortly.
Operators Precedence & Associativity Table
| Operator | Meaning of operator | Associativity |
|---|---|---|
| () [] -> . |
Functional call Array element reference Indirect member selection Direct member selection |
Left to right |
| ! ~ + - ++ -- & * sizeof (type) |
Logical negation Bitwise(1 's) complement Unary plus Unary minus Increment Decrement Dereference (Address) Pointer reference Returns the size of an object Typecast (conversion) |
Right to left |
| * / % |
Multiply Divide Remainder |
Left to right |
| + - |
Binary plus(Addition) Binary minus(subtraction) |
Left to right |
| << >> |
Left shift Right shift |
Left to right |
| < <= > >= |
Less than Less than or equal Greater than Greater than or equal |
Left to right |
| == != |
Equal to Not equal to |
Left to right |
| & | Bitwise AND | Left to right |
| ^ | Bitwise exclusive OR | Left to right |
| | | Bitwise OR | Left to right |
| && | Logical AND | Left to right |
| || | Logical OR | Left to right |
| ?: | Conditional Operator | Right to left |
| = *= /= %= += -= &= ^= |= <<= >>= |
Simple assignment Assign product Assign quotient Assign remainder Assign sum Assign difference Assign bitwise AND Assign bitwise XOR Assign bitwise OR Assign left shift Assign right shift |
Right to left |
| , | Separator of expressions | Left to right |
Associativity of Operators
The associativity of operators determines the direction in which an expression is evaluated. For example,
b = a;
Here, the value of a is assigned to b, and not the other way around. It's because the associativity of the = operator is from right to left.
Also, if two operators of the same precedence (priority) are present, associativity determines the direction in which they execute.
Let us consider an example:
1 == 2 != 3
Here, operators == and != have the same precedence. And, their associativity is from left to right. Hence, 1 == 2 is executed first.
The expression above is equivalent to:
(1 == 2) != 3
Note: If a statement has multiple operators, you can use parentheses () to make the code more readable.