Precedence | Operator | Description | Example | Associativity |
1 | () []->.::++-- | Grouping operator Array accessMember access from a pointerMember access from an objectScoping operatorPost-incrementPost-decrement | (a + b) / 4; array[4] = 2;ptr->age = 34;obj.age = 34;Class::age = 2;for( i = 0; i < 10; i++ ) ...for( i = 10; i > 0; i-- ) ... | left to right |
2 | ! ~++---+*&(type) | Logical negation Bitwise complementPre-incrementPre-decrementUnary minusUnary plusDereferenceAddress ofCast to a given typeReturn size in bytes | if( !done ) ... flags = ~flags;for( i = 0; i < 10; ++i ) ...for( i = 10; i > 0; --i ) ...int i = -1;int i = +1;data = *ptr;address = &obj;int i = (int) floatNum;int size = sizeof(floatNum); | right to left |
3 | ->* .* | Member pointer selector Member pointer selector | ptr->*var = 24; obj.*var = 24; | left to right |
4 | * /% | Multiplication DivisionModulus | int i = 2 * 4; float f = 10 / 3;int rem = 4 % 3; | left to right |
5 | + - | Addition Subtraction | int i = 2 + 3; int i = 5 - 1; | left to right |
6 | << >> | Bitwise shift left Bitwise shift right | int flags = 33 << 1; int flags = 33 >> 1; | left to right |
7 | < <=>>= | Comparison less-than Comparison less-than-or-equal-toComparison greater-thanComparison geater-than-or-equal-to | if( i < 42 ) ... if( i <= 42 ) ...if( i > 42 ) ...if( i >= 42 ) ... | left to right |
8 | == != | Comparison equal-to Comparison not-equal-to | if( i == 42 ) ... if( i != 42 ) ... | left to right |
9 | & | Bitwise AND | flags = flags & 42; | left to right |
10 | ^ | Bitwise exclusive OR | flags = flags ^ 42; | left to right |
11 | | | Bitwise inclusive (normal) OR | flags = flags | 42; | left to right |
12 | && | Logical AND | if( conditionA && conditionB ) ... | left to right |
13 | || | Logical OR | if( conditionA || conditionB ) ... | left to right |
14 | ? : | Ternary conditional (if-then-else) | int i = (a > b) ? a : b; | right to left |
15 | = +=-=*=/=%=&=^=|=<<=>>= | Assignment operator Increment and assignDecrement and assignMultiply and assignDivide and assignModulo and assignBitwise AND and assignBitwise exclusive OR and assignBitwise inclusive (normal) OR and assignBitwise shift left and assignBitwise shift right and assign | int a = b; a += 3;b -= 4;a *= 5;a /= 2;a %= 3;flags &= new_flags;flags ^= new_flags;flags |= new_flags;flags <<= 2;flags >>= 2; | right to left |
16 | , | Sequential evaluation operator | for( i = 0, j = 0; i < 10; i++, j++ ) ... | left to right |