Операции
В 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 определены следующие логические операции:
Логические операции применимы к операндам целого и логического типов. Если операнды - целые числа, то результат логической операции есть тоже целое число, биты которого (двоичные разряды) формируются из битов операндов по правилам, указанным в табл. 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, если левый операнд принадлежит множеству. 1 2 3
8 8 8
| |