на главную
к оглавлению

7.6. Последовательность выполнения операций в выражении.

       Последовательность выполнения операций в выражении соответствует порядку записи операторов слева направо. Изменить последовательность выполнения операций с помощью программирования выражений в скобках нельзя, поскольку языком макропрограммирования не предусмотрено использование скобок в выражении.

       Выполнение операторов в выражении производится в соответствии с их приоритетом. Те операторы, приоритет которых выше, выполняются первыми.

       Операторы, имеющий равный приоритет, выполняются в порядке их записи в выражении слева направо (за исключением оператора передачи управления).

       Приоритет операторов возрастает в следующем порядке от низшего к высшему:
       - оператор передачи управления,
       - арифметические, логические и условные операторы и оператор присвоения,
       - операторы-функции.

       Если в выражении запрограммировано несколько операторов передачи управления, то выполняется только последний оператор передачи управления. Тип оператора передачи управления влияния на приоритет не оказывает.

       Подробнее последовательность выполнения операций рассмотрена в примерах.

       Это выражение фактически эквивалентно набору из шести элементарных выражений 1 - 6. То есть, последовательность выполнения операций будет следующая.

       Первы выполняется оператор присвоения и параметру #1 присвоится число 2.

       Затем выполнится оператор сложения и к величине параметра #1 добавится величина параметра #2, результат останется в параметре #1, то есть присвоение произойдёт неявно.

       После чего из содержимого параметра #1 вычтется число 10, результат будет в параметре #1.

       Четвёртой операцией будет умножение содержимого параметра #1 на содержимое параметра #3. Результат будет в параметре #1.

       Следующей выполнится операция установки четвёртого и второго разрядов в параметре #1 (20 (десятичное) - 10100 (двоичное)). После этого будет вычислен SIN30. Результат деления будет находиться в параметре #1.

       Таким образом, в параметре #1 окажется результат выполнения операций, запрограммированных справа от оператора присвоения.

       Допустим, параметр
       #2 содержит 3.5
       #C содержит -5

       Результаты выполнения операций в параметре #1:

       Из приведённого примера видно, что операторы умножения и деления приоритета над операторами сложения и вычитания не имеют.

       Пример:
       #66=3.3*#U=RND#66
       Такое программирование является правильным.
       Последовательность выполнения операций следующая:
       Первым выполняется умножение числа 3.3 на содержимое параметра #U.
       Затем выполнится первый оператор присвоения и результат умножения присвоится параметру #66. После чего выполнится функция RND, тем самым содержимое параметра #66 округлится до целого.
       Последним выполнится второй оператор присвоения и результат округления поместится в параметр #66.
       Таким образом, это выражение позволяет получить в параметре #66 округлённую величину произведения числа 3.3 на содержимое параметра #U.
       Примеры выполнения условного выражения.
       Пример:
       #(10)_#(20)_#(30)
       Выполнится последний безусловный оператор передачи управления.
       Предыдущие игнорируются.
       Пример:
       #A==#B(10)_#(#A)
       При выполнении равенства между содержимым #А и #В управление будет передано в соответствии с назначенным оператором передачи управления, запрограммированным последним. Условный оператор передачи управления, стоящий перед ним, игнорируется.
       Пример:
       #2>=5.73(100)+#3+1
       Последовательность выполнения такова:
       В начале проверится выполнение условия "больше или равно" и, независимо от результата проверки, к содержимому параметра #2 добавляется содержимое параметра #3, результат заносится в параметр #2. Затем к содержимому #2 добавляется 1, результат хранится в #2. Но передача управления произойдёт только при выполнении условия ">=".
       Выражение эквивалентно двум выражениям:
       1. #2+#3+1
       2. #2>=5.73(100),
       при условии, что первое всегда выполняется.


.
Яндекс.Метрика