Приоритет операций
Lazarus IDE: Основы программирования в Windows
Несмотря на то, что всё потихоньку уходит в сеть, программирование для настольных компьютеров остаётся востребованным. И будет таковым ещё долго. Ну а самая распространённая операционная система для настольных компьютеров – это по-прежнему Windows. Поэтому любой программист, даже если он собирается стать веб-разработчиком, должен знать хотя бы основы создания программ для Windows. Подробнее... |
Если вы внимательно изучили предыдущие разделы, то вы наверняка уже догадались, что выражения могут состоять из нескольких операторов и операндов. Более того, выражения могут состоять из нескольких выражений. Например, в программе могут быть такие выражения:
x := 1 + 2 * 3;
В случае, когда мы имеем дело с математическими операциями (как в примере выше), приоритет операций определяется также как и в математике. То есть более высокий приоритет имеют умножение и деление. А сложение и вычитание имеют менее высокий приоритет. То есть в нашем примере х будет равен 7, так как сначала выполняется умножение, и только потом - сложение.
Как в математике, так и в программировании, если мы хотим повысить приоритет выражения, то мы должны заключить это выражение в круглые скобки. Например,
x := (1 + 2) * 3;
В этом случае х уже будет равен 9, так как сначала выполняется вычисление выражения в скобках, и только потом выполняется умножение.
Если в выражении имеется несколько операторов с одинаковым приоритетом, то вычисления выполняются слева направо. Например,
x := 1 + 2 - 3;
Здесь сначала будет выполнено сложение чисел 1 и 2, а затем от результата отнимется число 3. В итоге х будет равно 0.
Однако, как вы помните, кроме арифметических операций бывают и другие, например, операции сравнения. Если в одном выражении встречаются операторы разных типов, то приоритет операции определяется по правилам, описанным в таблице 15.4.
Оператор | Приоритет | Категория |
not @ - |
Высший | Унарные операторы |
* / div mod and shl shr as << >> |
Второй | Операторы умножения |
+ - or xor |
Третий | Операторы сложения |
< <> > <= >= in is |
Низший | Операторы сравнения |
С некоторыми из приведённых в таблице операторов вы пока не знакомы. Ну и ладно. Всему своё время. Пока просто добавьте страницу в закладки. Вернётесь к ней при необходимости. Итак, унарные операции имеют наивысший приоритет, то есть всегда выполняются первыми в выражении. Например, во второй строке кода
у := -2;
х := -у * 2;
сначала знак значения переменной у меняется на противоположный, а потом выполняется умножение. В результате х будет равно 4.
Вторыми выполняются операции умножения, затем операции сложения, а в самую последнюю очередь выполняются операторы сравнения.
Перед домашними заданием рекомендую вспомнить предыдущий урок.
Не создавая программы, определите, какую строку выведет следующий код:
var x, y : integer; begin y := -4; x := -y + 1 + 6 div 2 - 3 * 4; if x = y then WriteLn('x = y') else WriteLn('x <> y'); ReadLn; end.Создайте программу с этим исходным кодом и проверьте ваши умозаключения.