Skip to content

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