Operator precedence

Operators listed by precedence, lowest first:

 expr1  expr2 ? expr1 : expr1
 ternary operator
 
 expr2 expr3 || expr3
 boolean or
 
 expr3 expr4 && expr4
 boolean and
 
 expr4 expr5 == expr5
 expr5 != expr5
 expr5 >= expr5
 expr5 > expr5
 expr5 <= expr5
 expr5 < expr5
 expr5 IS expr5
 expr5 ISNOT expr5
 expr5 ISA expr5
 expr5 ISNOTA expr5
 equal
 not equal
 greater than or equal
 greater than
 smaller than or equal
 smaller than
 same object
 not same object
 same class
 not same class
 
 expr5 expr6 .. expr6
 string concatenation
 
 expr6 expr7 & expr7
 expr7 | expr7
 expr7 ^ expr7
 logical and
 logical or
 logical xor
 
 expr7 expr8 << expr8
 expr8 >> expr8
 bitwise left shift
 bitwise right shift
 
 expr8 expr9 + expr9
 expr9 - expr9
 add
 subtract
 
 expr9 expr10 * expr10
 expr10 / expr10
 expr10 % expr10
 multiply
 divide
 remainder
 
 expr10 ++expr11
 --expr11
expr11++
expr11--
 pre-increment
 pre-decrement
 post-increment
 post-decrement
 can have both pre- and post-
 expr11  -expr12
 !expr12
 ~expr12
 negate
 boolean invert
 bitwise invert
 
 expr12 .expr13 member 
 expr13 ( expr1 )
 1234
 0x1abc
 0b010110
 'c'
 "string"
 R"string"
 name

 [ expr1, ... ]
 { expr1: expr1, ... }
 NIL
 THIS
 NEW(
expr1, ...)
 TRUE
 FALSE
 FAIL
 OK

 grouping
 number
 hex number
 binary number
 character constant
 string constant
 raw string constant
 identifier
 list initializer
 dict initializer
 

Note: compared to C the precedence of &, | and ^ is different.  In C their precedence is lower
than for comparative operators, which often leads to mistakes.