Когда в одном выражении несколько операторов, компилятор должен определить порядок их выполнения. При этом компилятор руководствуется правилами, которые называются
старшинством операторов.
Понимание старшинства операторов нужно для правильного написания выражений — иногда результат может не соответствовать ожидаемому.
Рассмотрим выражение 42 + 6 * 10. Если сложить 42 и 6, а затем сумму умножить на 10, получится 480. Если же умножить 6 на 10 и к результату прибавить 42, получится 102. При компиляции кода специальный компонент компилятора —
лексический анализатор —
отвечает за порядок чтения этого кода. Именно лексический анализатор определяет относительное старшинство разнородных операторов в одном выражении. Для этого он использует некоторое значение — приоритет — каждого поддерживаемого оператора. Более приоритетные операторы разрешаются в первую очередь. В нашем примере оператор * имеет старшинство над оператором +, так как *
поглощает
(сейчас поясню этот термин) свои операнды до того, как это сделает +. Объяснение кроется в общих арифметических правилах: умножение и деление
всегда
имеют более высокий приоритет, чем сложение и вычитание. Вернемся к примеру: говорят, что число 6
поглощено
оператором * и в 42 + 6 * 10 и в 42 * 6 + 10, так что эти выражения эквивалентны 42 + (6 * 10) и (42 * 6) + 10.