Operator Precedence
The following table shows how Spice prioritizes the supported operators. The list is sorted top to bottom in descending precedence.
Precedence table¶
Precedence | Operator | Description | Associativity | Modifying |
---|---|---|---|---|
1 | a() | Function/procedure call | left to right | no |
1 | :: | Scope access operator | left to right | no |
1 | . | Member access operator | left to right | no |
1 | a[] | Subscript operator | left to right | no |
1 | a++ | Postfix increment operator | left to right | yes |
1 | a-- | Postfix decrement operator | left to right | yes |
2 | - | Unary minus operator | right to left | no |
2 | ++a | Prefix increment operator | right to left | yes |
2 | --a | Prefix decrement operator | right to left | yes |
2 | ! | Logical not operator | right to left | no |
2 | ~ | Bitwise not operator | right to left | no |
2 | * | Indirection operator | right to left | no |
2 | & | Address-of operator | right to left | no |
3 | (type) | Type cast operator | right to left | no |
4 | * | Multiplication | left to right | no |
4 | / | Division | left to right | no |
4 | % | Remainder | left to right | no |
5 | + | Addition | left to right | no |
5 | - | Subtraction | left to right | no |
6 | << | Bitwise left shift operator | left to right | no |
6 | >> | Bitwise right shift operator | left to right | no |
7 | < | Relational less operator | left to right | no |
7 | > | Relational greater operator | left to right | no |
7 | <= | Relational less equal operator | left to right | no |
7 | >= | Relational greater equal operator | left to right | no |
8 | == | Equal operator | left to right | no |
8 | != | Not equal operator | left to right | no |
9 | & | Bitwise and operator | left to right | no |
10 | ^ | Bitwise or operator | left to right | no |
11 | | | Bitwise or operator | left to right | no |
12 | && | Logical and operator | left to right | no |
13 | || | Logical or operator | left to right | no |
14 | a?b:c | Ternary conditional | right to left | no |
15 | = | Assign operator | right to left | yes |
15 | += | Compound sum assign operator | right to left | yes |
15 | -= | Compound difference assign operator | right to left | yes |
15 | *= | Compound product assign operator | right to left | yes |
15 | /= | Compound quotient assign operator | right to left | yes |
15 | %= | Compound remainder assign operator | right to left | yes |
15 | <<= | Compound shift left assign operator | right to left | yes |
15 | >>= | Compound shift right assign operator | right to left | yes |
15 | &= | Compound bitwise and assign operator | right to left | yes |
15 | |= | Compound bitwise or assign operator | right to left | yes |
15 | ^= | Compound bitwise xor assign operator | right to left | yes |
16 | , | Comma | left to right | no |