The document discusses operator precedence and associativity in C. It covers comparison, arithmetic, assignment, increment/decrement, bitwise, and logical operators. For each operator, it provides the symbol, description, examples, and order of precedence from highest to lowest. It also gives examples of how to use various operators in code snippets.
2. Precedence and Associativity of Operators
Operators Associativity
( ) [ ] . -> ++(postfix) --(postfix) left to right
++(prefix) --(prefix) ! ~ sizeof(type)
right to left
+(unary) -(unary) &(address) *(dereference)
* / % left to right
+ - left to right
<< >> left to right
< <= > >= left to right
== != left to right
& left to right
^ left to right
| left to right
&& left to right
|| left to right
? : right to left
= += -= *= /= %= >>= <<= &= ^= |= right to left
2
3. Operators
Comparison:
C operator Description Example
== = a == 2
!= Not equal a != 3
< < a<3
> > a>4
<= a <= 5
>= a >= 3
! Negative !(a < 3)
&& and (3 < a) && (a < 5)
|| or (a < 3) || ( 5 < a)
3
5. Operators
Assignment
Operator Description Example
= assignment a=b
+= a=a+3 a += 3
-= a=a-3 a -= 3
*= a=a*3 a *= 3
/= a=a/3 a /= 3
%= a=a%3 a %= 3
5
6. Increment and Decrement Operators
Increment operator
Postfix k++
k = k - 1 ;
Prefix ++k
Decrement operator
Postfix k--
k = k - 1 ;
Prefix --k
But, It is a different when use with another operator
Prefix : increase or decrease before used in expression
Postfix : increase or decrease after used in expression
6
7. Increment and Decrement Operators
[Ex] int i = 4, j;
j = ++i + 3;
printf(i : %d, j = %dn, i, j);
j = i++ + 3;
printf(i : %d, j = %dn, i, j);
j = --i + 3;
printf(i : %d, j = %dn, i, j);
j = i-- + 3;
printf(i : %d, j = %dn, i, j);
i = 5, j =8
i = 6, j =8
i = 5, j =8
i = 4, j =8
7
8. Bit Operators
<<, >>, |, &, ^,~
<< : Left shift n places
a = 100 << 1 ; 100 -> 01100100
printf( %d, a ) Shift to left by 1 bit
11001000 (=200)
>> : Right shift n places
a = 100 >> 1 ; 100 -> 01100100
printf( %d, a ) Shift to right by 1 bit
001100100 (=50)
8
9. Bit Operators
(8bit Computer)
<<, >>, |, &, ^,~
| : Logical OR, if either bit is 1, 100 -> 01100100
the result is 1 200 -> 11001000
a = 100 | 200 ; -------------------
printf( %d, a ) a = 11101100 (236)
& : Logical AND, if both bits are 1,
100 -> 01100100
the result is 1
200 -> 11001000
a = 100 & 200 ; -------------------
printf( %d, a ) a = 01000000 (64)
^ : Logical XOR, if one and only
one bit is 1, the result is 1 100 -> 01100100
a = 100 ^ 200 ; 200 -> 11001000
printf( %d, a ) -------------------
a = 10101100 (172)
9
10. Bit Operators
(8bit Computer)
<<, >>, |, &, ^,~
~ : Logical inverter 100 -> 01100100
-------------------
a = ~100;
a = 10011011 (155)
printf( %d, a )
10
11. Example
[Ex]
i = 3 , j = 2 , k = 1 ;
if ( i > j > k ) printf( Yes )
else printf( No ) ;
[Ex]
int a, i =1, j = 2, k ;
a = i < 2 + j;
j = 5 * (k = 3);
printf( %d %d %dn, a, i, j, k ) ;
( i < j ) && ( j < k )
This statement means that j is between i and k.
11
12. Example
Example
int a = 5, b = 6, c = 7 ;
int d ;
printf( %d %d %dn, a < b, a > b, a != b ) ;
d = (a < b) && (b < c ) ;
printf( %d %d %dn, d, (a > b) || (b > c), !(!5) ) ;
12
13. Assignment Operators
Compound Assignment
Compound Assignment operators
op= [Ex] *=, -=, /=, %=, +=
variable = variable op (expression)
=> variable op= expression
[Ex] int k = 5;
k += 2; /* k = k + 2, k=7 */
k -= 2; /* k = k - 2, k=5 */
k *= 2; /* k = k * 2, k=10 */
k /= 2; /* k = k / 2, k=5 */
k %= 2; /* k = k % 2, k=1 */
13