Приоритет операций

 

При вычислении значений выражений следует учитывать, что операторы имеют разный приоритет.

В Object Pascal определены следующие операции:

Ø унарные not, @ ;

Ø мультипликативные *, /, div, mod, and, shi, shr;

Ø аддитивные +, -, or, xor;

Ø отношения =, <>, <, >, <=, >=, in.

Приоритет операцийубывает в указанном порядке, т. е. наивысшим приоритетом обладают унарные операции, низшим - операции отношения. Порядок выполнения нескольких операций равного приоритета устанавливается компилятором из условия оптимизации кода программы и не обязательно слева направо. При исчислении логических выражений операции равного приоритета всегда вычисляются слева направо, причем будут вычисляться все или только достаточные операции в зависимости от установленного в среде Delphi переключателя Project | Options | Compiler | Complete Boolean eval: при установленном переключателе вычисляются все операции отношения, при неустановленном - только те, что необходимы для однозначного определения результата исчисления.

Для задания нужного порядка выполнения операций в выражении можно использовать скобки, например:

(r1+r2+r3)/(r1*r2*r3)

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