C Operator Precedence
C Operator Precedence
C Operator Precedence
C Operator Precedence
The operators at the top of this list are evaluated first. Precedence Operator 1 :: () [] -> . ++ -! ~ ++ -+ * & (type) sizeof ->* .* * / % + << >> < <= > >= == != & Description Scoping operator Grouping operator Array access Member access from a pointer Member access from an object Post-increment Post-decrement Logical negation Bitwise complement Pre-increment Pre-decrement Unary minus Unary plus Dereference Address of Cast to a given type Return size in bytes Member pointer selector Member object selector Multiplication Division Modulus Addition Subtraction Bitwise shift left Bitwise shift right Comparison less-than Comparison less-than-orequal-to Comparison greater-than Comparison geater-than-orequal-to Comparison equal-to Comparison not-equal-to Bitwise AND Example Class::age = 2; (a + b) / 4; array[4] = 2; ptr->age = 34; obj.age = 34; for( i = 0; i < 10; i++ ) ... for( i = 10; i > 0; i-- ) ... 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); ptr->*var = 24; obj.*var = 24; int i = 2 * 4; float f = 10 / 3; int rem = 4 % 3; int i = 2 + 3; int i = 5 - 1; int flags = 33 << 1; int flags = 33 >> 1; if( i < 42 ) ... if( i <= 42 ) ... if( i > 42 ) ... if( i >= 42 ) ... if( i == 42 ) ... if( i != 42 ) ... flags = flags & 42; Associativity none
left to right
right to left
left to right
left to right
6 7
left to right
left to right
https://www.cs50.net/resources/cppref erence.com/operator_precedence.html
10
left to right
1/2
11/22/12
C Operator Precedence
10 11 12 13 14 15
& ^ | && || ?:
Bitwise AND Bitwise exclusive OR Bitwise inclusive (normal) OR Logical AND Logical OR Ternary conditional (if-thenelse) Assignment operator Increment and assign Decrement and assign Multiply and assign Divide and assign Modulo and assign Bitwise AND and assign Bitwise exclusive OR and assign Bitwise inclusive (normal) OR and assign Bitwise shift left and assign Bitwise shift right and assign Sequential evaluation operator
flags = flags & 42; flags = flags ^ 42; flags = flags | 42; if( conditionA && conditionB ) ...
if( conditionA || conditionB ) left to right ... int i = (a > b) ? a : b; right to left
16
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
17
It is important to note that there is no specified precedence for the operation of changing a variable into a value. For example, consider the following code:
fotx rsl; la , eut x=1 ; rsl =x/+x eut +;
The value of result is not guaranteed to be consistent across different compilers, because it is not clear whether the computer should change the variable x (the one that occurs on the left side of the division operator) before using it. Depending on which compiler you are using, the variable result can either be 1.0 or 0.5. The bottom line is that you should not use the same variable multiple times in a single expression when using operators with side effects.
https://www.cs50.net/resources/cppref erence.com/operator_precedence.html
2/2