Целая и вещественная арифметика
Выражение состоит из операндов и операторов. Операторы находятся между операндами и обозначают действия, которые выполняются над операндами. В качестве операндов выражения можно использовать: переменную, константу, функцию или другое выражение. Основные алгебраические операторы приведены в табл. 9.1.
Таблица 9.1.
Алгебраические операторы
Оператор | Действие |
+ | Сложение |
- | Вычитание |
* | Умножение |
/ | Деление |
DIV | Деление нацело |
MOD | Вычисление остатка от деления |
При записи выражений между операндом и оператором, за исключением операторов DIV и MOD, пробел можно не ставить.
Результат применения операторов +, -, * и / очевиден.
Оператор DIV позволяет получить целую часть результата деления одного числа на другое. Например, значение выражения 15 DIV 7 равно 2.
Оператор MOD, деление по модулю, позволяет получить остаток от деления одного числа на другое. Например, значение выражения 15 MOD 7 равно 1.
В простейшем случае выражение может представлять собой константу или переменную.
Примеры выражений:
1230.001* i+1
А + В/С Summa*0.75 (В1+ВЗ+ВЗ)/3
Cena MOD 100
Тип выражения определяется типом операндов, входящих в выражение, и зависит от операций, выполняемых над ними. Например, если оба операнда, над которыми выполняется операция сложения, целые, то очевидно, что результат тоже является целым. А если хотя бы один из операндов дробный, то тип результата дробный, даже в том случае, если дробная часть значения выражения равна нулю.
Важно уметь определять тип выражения. При определении типа выражения следует иметь в виду, что тип константы определяется ее видом, а тип переменной задается в инструкции объявления. Например, константы 0, 1 и -512 — целого типа (integer), а константы 1.0, 0.0 и 3.2Е-05 — вещественного типа (real).
Любые операции с вещественными числами выполняются с некоторой погрешностью.
В таблице 9.2. приведены правила определения типа выражения в зависимости от типа операндов и вида оператора.
Таблица 9.2
Правила определения типа выражения
Оператор | Тип операндов | Тип выражения |
*, +, - | Хотя бы один из операндов вещественного типа | Вещественный тип |
*, +, - | Оба операнда целого типа | Целый тип |
/ | Вещественный или целый тип | Всегда вещественный тип |
DIV, MOD | Всегда целый тип | Всегда целый тип |
Правила использования операций с операндами различного типа приводятся в табл.9.3.
Таблица 9.3.
Правила использования операций с операндами различного типа
Операция | Действие | Тип операндов | Тип результата |
not | Отрицание | Логический | Логический |
not | Отрицание | Любой целый | Тип операнда |
@ | Адрес | Любой | Указатель |
* | Умножение | Любой целый | Наименьший целый |
* | Умножение | Любой вещественный | Extended |
* | Пересечение множеств | Множественный | Множественный |
/ | Деление | Любой вещественный | Extended |
div | Целочисленное деление | Любой целый | Наименьший целый |
mod | Остаток от деления | Любой целый | Наименьший целый |
and | Логическое И | Логический | Логический |
and | Логическое И | Любой целый | Наименьший целый |
shl | Левый сдвиг | Любой целый | Наименьший целый |
shr | Правый сдвиг | Любой целый | Наименьший целый |
+ | Сложение | Любой целый | Наименьший целый |
+ | Сложение | Любой вещественный | Extended |
+ | Объединение множеств | Множественный | Множественный |
+ | Сцепление строк | Строковый | Строковый |
- | Вычитание | Любой целый | Наименьший целый |
- | Вычитание | Любой вещественный | Extended |
or | Логическое или | Логический | Логический |
or | Логическое или | Любой целый | Наименьший целый |
= | Равно | Любой простой или строковый | Логический |
<> | Не равно | Любой простой или строковый | Логический |
< | Меньше | Любой простой или строковый | Логический |
<= | Меньше или равно | Любой простой или строковый | Логический |
> | Больше | Любой простой или строковый | Логический |
>= | Больше или равно | Любой простой или строковый | Логический |
Унарная операция @ применяется к операнду любого типа и возвращает результат типа pointer, в котором содержится адрес операнда. Если операция @ применяется к процедуре, функции или методу в объекте, ее результатом будет адрес точки входа в эту процедуру (функцию, метод). Этот адрес можно использовать только в подпрограмме, написанной на Ассемблере, или во фрагментах INLINE.
В Object Pascal определены следующие логические операции:
Ø not- логическое НЕ;
Ø and- логическое И;
Ø or- логическое ИЛИ;
Ø xor- исключительное ИЛИ.
Логические операции применимы к операндам целого и логического типов. Если операнды - целые числа, то результат логической операции есть тоже целое число, биты которого (двоичные разряды) формируются из битов операндов по правилам, указанным в табл.9.4.
Таблица 9.4
Правила формирования
Логичеcкие операции над данными целого типа (поразрядно) | |||||
Операнд 1 | Операнд 2 | not | and | or | xor |
- | - | - | - | ||
- | - | - | - | ||
- | |||||
- | |||||
- | |||||
- |
К логическим же в Object Pascal обычно относятся и две сдвиговые операции над целыми числами:
Ø i shlj - сдвиг содержимого i на j разрядов влево; освободившиеся младшие разряды заполняются нулями;
Ø i shrj - сдвиг содержимого i на j разрядов вправо; освободившиеся старшие разряды заполняются нулями.
В этих операциях i и j - выражения любого целого типа.
Логические операции над логическими данными дают результат логического типа по правилам, указанным в Табл.9.5.
Таблица 9.5
Правила проведения логических операций
Логические операции над данными логического типа | |||||
Операнд 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, если левый операнд принадлежит множеству.