##### cppreference.com

##### Search

Create account

##### Namespaces

- Page
- Discussion

##### Variants

##### Views

- View
- Edit
- History

##### Actions

# C Operator Precedence

From cppreference.com
< c‎ | language

The following table lists the precedence and associativity of C operators. Operators are listed top to bottom, in descending precedence.

Precedence | Operator | Description | Associativity
--- | --- | --- | ---
1 | `++` `--` | Suffix/postfix increment and decrement | Left-to-right
`()` | Function call
`[]` | Array subscripting
`.` | Structure and union member access
`−>` | Structure and union member access through pointer
`(type){list}` | Compound literal(C99)
2 | `++` `--` | Prefix increment and decrement | Right-to-left
`+` `−` | Unary plus and minus
`!` `~` | Logical NOT and bitwise NOT
`(type)` | Type cast
`*` | Indirection (dereference)
`&` | Address-of
`sizeof` | Size-of
`_Alignof` | Alignment requirement(C11)
3 | `*` `/` `%` | Multiplication, division, and remainder | Left-to-right
4 | `+` `−` | Addition and subtraction
5 | `<<` `>>` | Bitwise left shift and right shift
6 | `<` `<=` | For relational operators < and ≤ respectively
`>` `>=` | For relational operators > and ≥ respectively
7 | `==` `!=` | For relational = and ≠ respectively
8 | `&` | Bitwise AND
9 | `^` | Bitwise XOR (exclusive or)
10 | `|` | Bitwise OR (inclusive or)
11 | `&&` | Logical AND
12 | `||` | Logical OR
13 | `?:` | Ternary conditional | Right-to-Left
14 | `=` | Simple assignment
`+=` `−=` | Assignment by sum and difference
`*=` `/=` `%=` | Assignment by product, quotient, and remainder
`<<=` `>>=` | Assignment by bitwise left shift and right shift
`&=` `^=` `|=` | Assignment by bitwise AND, XOR, and OR
15 | `,` | Comma | Left-to-right

When parsing an expression, an operator which is listed on some row will be bound tighter (as if by parentheses) to its arguments than any operator that is listed on a row further below it.

Operators that are in the same cell (there may be several rows of operators listed in a cell) have the same precedence and are grouped in the given direction. For example, the expression a=b=c is parsed as a=(b=c), and not as (a=b)=c because of right-to-left associativity. Note that this does not affect the evaluation order of the subexpressions a, b, and c.

### [edit] See Also

Order of evaluation of operator arguments at run time.

Common operators
assignment | increment decrement | arithmetic | logical | comparison | member access | other
a = b a += b a -= b a *= b a /= b a %= b a &= b a |= b a ^= b a <<= b a >>= b | ++a --a a++ a-- | +a -a a + b a - b a * b a / b a % b ~a a & b a | b a ^ b a << b a >> b | !a a && b a || b | a == b a != b a < b a > b a <= b a >= b | a[b] *a &a a->b a.b | a(...) a, b (type) a ? : sizeof _Alignof (since C11)

Retrieved from "http://en.cppreference.com/mwiki/index.php?title=c/language/operator_precedence&oldid=43946"