Логика за приоритетом операторов

Каков мотив для компилятора следовать определенному приоритету среди операторов. Почему это не было разработано просто порядком, в котором написан код. Я имею в виду, почему "a + b * c" рассматривается как "(b * c) + a"? почему бы просто не следовать тому же порядку, как это написано? Каждый раз, когда я пытаюсь выучить язык программирования, мне трудно запоминать приоритет / приоритет. Есть ли простой способ освоить это?

3 ответа

На самом деле было бы проще писать парсеры / компиляторы без необходимости иметь дело с приоритетом операторов. В таком случае арифметика будет просто выполняться слева направо.

Пример: 10+20*30 => (10+20)*30 => 30*30 => 900

Итак, зачем иметь дело с приоритетом оператора? Это происходит от математики (арифметики) и было просто практикой, которой люди хотели следовать. Это не должно беспокоить, так как все языки имеют примерно одинаковый приоритет операторов, вам не нужно изучать последовательность действий операторов для каждого языка. Более того, скобки или парантез имеют наивысший приоритет, поэтому вы можете использовать их, если не уверены.

Возможно, вы захотите прочитать, почему правило BODMAS было создано в первую очередь.

Точность оператора в C близко соответствует базовому арифметическому порядку операций. Но вы правы, есть и другие наборы правил.

Одна альтернатива, которую изучают многие люди на уроках программирования, - обратная польская запись. На самом деле, инженерные школы в 70-х годах преподавали нотацию на польском языке в обычных классах по математике, потому что так работали калькуляторы HP. Это гораздо более простой метод для компьютеров, и он очень похож на то, как процессор обрабатывает данные с использованием стека.

Это как в обычных математических правилах. У вас есть приоритеты для функций и операций. Если вы хотите изменить приоритет, вы должны использовать скобки или другой порядок для операндов.

Другие вопросы по тегам