Целая и вещественная арифметика

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