| Приоритет | Ассоциативность | Оператор | Описание | Пример | 
|---|---|---|---|---|
| 1 | Нет | :: | Область видимости | a::b | 
| 2 | Левая | . | Доступ к члену | a.b | 
| 2 | Левая | [] | Доступ к индексу | a[b] | 
| 2 | Левая | () | Вызов функции | a(b) | 
| 2 | Левая | ++ | Постинкримент | a++ | 
| 2 | Левая | -- | Постдекримент | a-- | 
| 3 | Правая | ++ | Преинкримент | ++a | 
| 3 | Правая | -- | Предекримент | --a | 
| 3 | Правая | ~ | Побитовое отрицание | ~a | 
| 3 | Правая | ! | Логическое НЕ | !a | 
| 3 | Правая | not | Логическое НЕ | not a | 
| 3 | Правая | - | Математическая смена знака | -a | 
| 3 | Правая | + | Математическое взятие модуля | +a | 
| 3 | Правая | @ | Ссылка | @a | 
| 3 | Правая | () | Приведение типа | a(b) | 
| 3 | Правая | cast | Приведение типа | cast<a>(b) | 
| 4 | Левая | ** | Возведение в степень | a**b | 
| 5 | Левая | * | Умножение | a*b | 
| 5 | Левая | / | Деление | a/b | 
| 5 | Левая | % | Модуль (оставшаяся часть от деления) | a%b | 
| 6 | Левая | + | Сложение | a+b | 
| 6 | Левая | - | Вычитание | a-b | 
| 7 | Левая | << | Битовый сдвиг влево | a<<b | 
| 7 | Левая | >> | Битовый сдвиг вправо | a>>b | 
| 7 | Левая | Битовый сдвиг вправо c сохранением знакового бита | a>>>b | |
| 8 | Левая | Меньше | a<b | |
| 8 | Левая | > | Больше | a>b | 
| 8 | Левая | <= | Меньше или равно | a<=b | 
| 8 | Левая | >= | Больше или равно | a>=b | 
| 9 | Левая | == | Равно | a==b | 
| 9 | Левая | != | Не равно | a!=b | 
| 9 | Левая | ^^ | Логическое исключающее ИЛИ | a^^b | 
| 9 | Левая | xor | Логическое исключающее ИЛИ | a xor b | 
| 9 | Левая | is | Принадлежит | a is b | 
| 9 | Левая | !is | Не принадлежит | a !is b | 
| 10 | Левая | & | Битовое И | a&b | 
| 11 | Левая | Битовое исключающее ИЛИ | a^b | |
| 12 | Левая | | | Битовое ИЛИ | a|b | 
| 13 | Левая | && | Логическое И | a&&b | 
| 13 | Левая | and | Логическое И | a and b | 
| 14 | Левая | || | Логическое ИЛИ | a||b | 
| 14 | Левая | or | Логическое ИЛИ | a or b | 
| 15 | Правая | ? : | Тернарный оператор | a?b:c | 
| 15 | Правая | = | Присваивание | a=b | 
| 15 | Правая | **= | Присваивающее возведение в степень | a**=b | 
| 15 | Правая | *= | Присваивающее умножение | a*=b | 
| 15 | Правая | /= | Присваивающее деление | a/=b | 
| 15 | Правая | %= | Присваивающее деление с остатком | a%=b | 
| 15 | Правая | += | Присваивающее сложение | a+=b | 
| 15 | Правая | -= | Присваивающее вычитание | a-=b | 
| 15 | Правая | <<= | Присваивающий битовый сдвиг влево | a<<=b | 
| 15 | Правая | >>= | Присваивающий битовый сдвиг вправо | a>>=b | 
| 15 | Правая | >>>= | Присваивающий битовый сдвиг вправо c сохранением знакового бита | a>>>=b | 
| 15 | Правая | &= | Присваивающее битовое И | a&=b | 
| 15 | Правая | ^= | Присваивающее битовое исключающее ИЛИ | a^=b | 
| 15 | Правая | |= | Присваивающее битовое ИЛИ | a|=b | 
| 15 | Правая | ?: | Теранрный оператор | a ? b : c | 
| 16 | Левая | , | Перечисление | a,b | 
Ассоциативность
Определяет направление разбора выражения.
- Левая: слева направо
- Правая: справа налево
Для примера возьмём правостороннее присваивание с левосторонним сложением:
a = b = c + d + eЧтоб не вдаваться в подробности, представим что компилятор под капотом заведёт переменную x для промежуточных вычислений и тогда порядок будет таким:
x = c + d
x = x + e
b = x
a = bДля любителей байткода выражение будет выглядеть так:
ASSIGN(a, ASSIGN(b, ADD(ADD(c, d), e)))Приоритет
Операции выполняются не слева на право, а следуя приоритету. Чем меньше значение в таблице тем приоритет считается выше, тобишь операция выполнится раньше других. Для операций с одинаковым приоритетом операции будут выполняться в порядке, заданном ассоциативностью.
Возьмём операции с разным приоритетом, например присваивание, умножение и сложение:
a = b + c * dВспомнив про переменную x из прошлого абзаца, запишем порядок выполнения:
x = c * d
x = b + x
a = xТак же не забудем про любителей байткода:
ASSIGN(a, ADD(b, MUL(c, d))) 
                        
                        
                    
 WARRAFT
                                WARRAFT
                            

 
                    
                
 
						
					 
						
					
Ред. Unryze