ОПЕРАЦИИ
6.5. ОПЕРАЦИИ
В 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, если левый операнд принадлежит множеству.