 Operator precedence
 Associativity
 Order of Evaluation.
Operator precedence and Associativity
Say in mathematics we are given with an expression.(2 * 3 + 2)  6 / 2
We know that in maths we use the formula BODMAS  Brackets Of Division or Multiplication and Addition or Subtraction. First thing inside brackets which is 2 * 3 + 2 => 6 + 2 => 8. Expression is now simplified to 8  6 / 2 => 8  3 => 5. This is called Operator precedence.
Take another example
8  2 + 1
Here subtraction and addition have same priority in such case evaluated from left to right. 8  2 + 1 => 6 + 1 => 7. This is called Associativity.
More details can be found in this link.
C adds one detail called Order of Evaluation. which is discussed in next part of this article.
Here is table that has Operator precedence and Associativity defined.
Operator

Description

Associativity

++ 

postincrement, postdecrement

left to right

++ 
+  !~ & sizeof 
preincrement, predecrement
Unary + and Unary  Logical not and bitwise not Address operator Size of variable/expression 
right to left

* / %

Multiplication, division and remainder

left to right

+ 

Addition subtraction

left to right

<< >>

bitwise left shift, bitwise right shift

left to right

< <=
> >= 
Less than or less than or equal to
greater than or greater than or equal to 
left to right

== !=

Equal, Not Equal

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 operator

right to left

=

Assignment, Other Assignment short cut

right to left

,

Comma

left to right

Order of Evaluation
for example we have2 + 3 + 8
both (1 + 3) + 8 and 1 + (3 + 8) both will same result 12. Even though there is Associativity that tells left to right, the result would be same in both cases. In such cases C standard allows any order of evaluation. Hence order is not guaranteed as the result is same. You might not appreciate now, it becomes glaringly clear if number were some function (covered later).
Operator where the order of evaluation is not guaranteed (when one or more of same operator is used in same parenthesis level)
 Addition
 Multiplication
 Binary AND
 Binary OR
 Binary XOR
In all other operators the order of evaluation is guaranteed.
But when it comes to 2  3 + 8, it is always (2  3) + 8 which is 7. Not 2  (3 + 8) !
Examples
#include <stdio.h> int main() { int a, b, c; a = 2 + 3 * 2; b = 4 / 2  1; c = 10 / 2 % 3; printf("Value of a, b, c is %d, %d, %d\n", a, b, c); a = b = c = 1; printf("Value of a, b, c is %d, %d, %d\n", a, b, c); a = b = c == 2; printf("Value of a, b, c is %d, %d, %d\n", a, b, c); return 0; }
output of the above program is
Value of a, b, c is 8, 1, 2 Value of a, b, c is 1, 1, 1 Value of a, b, c is 0, 0, 1
Links
Quiz  Not Yet written !! Next Article  C Programming #17: CommentsPrevious Article  C Programming #15: Operators  Expression and Statement
All Article  C Programming
No comments :
Post a Comment