В Object Pascal определены следующие операции:
унарные not, @ ;
мультипликативные *, /, div, mod, and, shi, shr;
аддитивные +, -, or, xor;
отношения =, <>, <, >, <=, >=, in.
Приоритет операций убывает в указанном порядке, т. е. наивысшим приоритетом обладают унарные операции, низшим - операции отношения. Порядок выполнения нескольких операций равного приоритета устанавливается компилятором из условия оптимизации кода программы и не обязательно слева направо. При исчислении логических выражений операции равного приоритета всегда вычисляются слева направо, причем будут вычисляться все или только достаточные операции в зависимости от установленного в среде
Delphi переключателя Project | Options | Compiler | Complete
Boolean eval: при установленном переключателе вычисляются все операции отношения, при неустановленном - только те, что необходимы для однозначного определения результата исчисления.
Правила использования операций с операндами различного типа приводятся в табл. 6.1.
Таблица 6.1
| Операция | Действие | Тип операндов | Тип результата |
| not | Отрицание | Логический | Логический |
| not | To же | Любой целый | Тип операнда |
| @ | Адрес | Любой | Указатель |
| * | Умножение | Любой целый | Наименьший целый |
| * | Тоже | Любой вещественный | Extended |
| * | Пересечение множеств | Множественный | Множественный |
| / | Деление | Любой вещественный | Extended |
| div | Целочисленное деление | Любой целый | Наименьший целый |
| mod | Остаток от деления | Тоже | - Тоже |
| and | Логическое И | Логический | Логический |
| and | То же | Любой целый | Наименьший целый |
| shl | Левый сдвиг | Тоже | То же |
| shr | Правый сдвиг | То же | То же |
| + | Сложение | Тоже | Тоже |
| + | Тоже | Любой вещественный | Extended |
| + | Объединение множеств | Множественный | Множественный |
| + | Сцепление строк | Строковый | Строковый |
| - | Вычитание | Любой целый | Наименьший целый |
| - | Тоже | Любой вещественный | Extenden |
| or | Логическое или | Логический | Логический |
| or | Тоже | Любой целый | Наименьший целый |
| = | Равно | Любой простой или строковый | Логический |
| 0 | Не равно | Тоже | Тоже |
| < | Меньше | Логический | Логический |
| <= | Меньше или равно | Тоже | Тоже |
| > | Больше | То же | Тоже |
| >= | Больше или равно | Тоже | Тоже |
Унарная операция @ применяется к операнду любого типа и возвращает результат типа pointer (см. гл. 9), в котором содержится адрес операнда. Если операция @ применяется к процедуре, функции или методу в объекте, ее результатом будет адрес точки входа в эту процедуру (функцию, метод). Этот адрес можно использовать только в подпрограмме, написанной на Ассемблере, или во фрагментах
INLINE.
В Object Pascal определены следующие логические операции:
not - логическое НЕ;
and - логическое И;
or - логическое ИЛИ;
xor - исключительное ИЛИ.
Логические операции применимы к операндам целого и логического типов. Если операнды - целые числа, то результат логической операции есть тоже целое число, биты которого (двоичные разряды) формируются из битов операндов по правилам, указанным в табл. 6.2.
Таблица 6.2
| Логичеcкие операции над данными целого типа (поразрядно) 5 | |||||
| Операнд 1 | Операнд 2 | not | and | or | xor |
| 1 | - | 0 | - | - | - |
| 0 | - | 1 | - | - | - |
| 0 | 0 | - | 0 | 0 | 0 |
| 0 | 1 | - | 0 | 1 | 1 |
| 1 | 0 | - | 0 | 1 | 1 |
| 1 | 1 | - | 1 | 1 | 0 |
К логическим же в Object Pascal обычно относятся и две сдвиговые операции над целыми числами:
i shl j - сдвиг содержимого / на j разрядов влево; освободившиеся младшие разряды заполняются нулями;
i shr j - сдвиг содержимого i на j разрядов вправо; освободившиеся старшие разряды заполняются нулями.
В этих операциях i и у - выражения любого целого типа.
Логические операции над логическими данными дают результат логического типа по правилам, указанным в табл. 6.3.
Таблица 6.3
| Логические операции над данными логического типа | |||||
| Операнд 1 | Операнд 2 | not | and | or | xor |
| True | - | False | - | - | - |
| False | - | True | - | - | - |
| False | False | - | False | False | False |
| False | True | - | False | True | True |
| True | False | - | False | True | True |
| True | True | - | True | True | False |
Операция отношения in применяется к двум операндам. Первым (левым) операндом должно быть выражение любого порядкового типа, вторым - множество, состоящее из элементов того же типа, или идентификатор множественного типа. Результат операции будет True, если левый операнд принадлежит множеству.