Почему важен приоритет операторов
Вопрос приоритета операторов не такой тривиальный, как может показаться на первый взгляд. Возьмем для примера обычную программу Калькулятор. Кажется, будто эта программа по-разному работает в обычном и научном режиме. Если в меню Вид выбирается стандартный режим, результатом выражения 5+4*3 будет 27, а если научный — 17. Обычный (не компьютерный) калькулятор в любом случае выдаст один и тот же ответ — 27. По историческим причинам (а именно из-за дороговизны памяти) первые калькуляторы имели всего два регистра памяти (для вводимых чисел). Таким образом, в память помещалось два числа, после чего с ними выполнялась операция, чтобы можно было освободить место для нового числа. В приведенном примере порядок инструкций был бы следующим. Число 5 помещалось бы в первый регистр, а 4 во второй. После этого выполнялась бы операция сложения, результат которой помещался бы в первый регистр. После этого число 3 помещалось бы во второй регистр и выполнялась бы операция умножения. Следовательно, результат вычисляется после каждого нажатия клавиши оператора. По мере того как аппаратура дешевела, стали возможными использование более двух регистров и реализация существовавших столетиями в математике правил приоритета операций. Однако на тот момент уже насчитывалось огромное количество старых калькуляторов, выполняющих вычисления “простым” путем. Производители калькуляторов побоялись потерять рынок, и потому решили выпускать два типа калькуляторов: для “обычных” людей и для “ученых”. Впоследствии эта методика была перенесена и в программные калькуляторы. Таким образом, порядок унарных операторов не повлиял на результат — в обоих случаях он оказался отрицательным.