Различает задачи на основе (получите это), какой оператор вы используете. Когда код анализируется, анализатор / компилятор находит операторы и решает, что делать с окружающими его вещами. Если + используется как для сложения, так и для конкатенации, это будет зависеть от предоставленных ему аргументов. Язык решает, что делать, когда это микс, например, если «4» + 5 равно «45» или 9.
Кроме того, операторы имеют приоритет. То есть некоторые операторы оцениваются раньше, чем другие. Вроде как порядок операций, которые вы изучаете в математике. Например, операторы + и - обычно имеют более низкий приоритет, чем операторы * и / (умножение и деление) (то есть операции умножения будут выполняться перед операциями сложения). Вот почему 4 * 5 + 2
будет равно 22 вместо 28. Вы можете найти здесь таблицу приоритетов операторов . Это для языка C, но оно должно быть аналогичным для большинства других языков.
Существует также ассоциативность операторов. Это (в основном) порядок, в котором оцениваются операторы одного типа. Большинство из тех, к которым вы привыкли, останутся ассоциативными. Например:
4 * 5 * 6 * 7
это осталось ассоциативным, что означает это:
((4 * 5) * 6) * 7
если в строке есть два или более операторов одного и того же приоритета (как в примере), то они будут оцениваться слева направо. То есть сначала 4 * 5, затем 20 * 6, затем 120 * 7. Примером правого ассоциативного оператора является оператор экспоненты:
4 ^ 5 ^ 6 ^ 7
Это становится
4 ^ (5 ^ (6 ^ 7))
Они оцениваются справа налево. Если бы оператор экспоненты оставался ассоциативным, это дало бы неправильный ответ.
Думайте об ассоциативности как "с какой стороны заключены скобки". они слева для левой ассоциации, а справа - для правой.
То, что такая же ссылка включает ассоциативность для каждого оператора. Опять же, это для языка Си, но оно должно быть практически идентичным для большинства других языков, которые вы будете использовать.