Арифметические операции


Унарные арифметические операции.

Знак операции Операция ^ Тип операндов Тип результата
+ сохранение знака целый вещественный целый вещественный
- отрицание знака целый вещественный целый вещественный


Бинарные арифметические операции.

^ Знак операции Операция Тип операндов Тип результата
+ сложение целый вещественный целый вещественный
- вычитание целый вещественный целый вещественный
* умножение целый вещественный целый вещественный
/ деление целый вещественный вещественный вещественный
div целочисленное деление целый целый
mod остаток целый целый


Примечание: операция + так же используется для работы со строками и множествами. Операции +, - и * так же используются для работы с множествами.

Любой операнд, тип которого является поддиапазоном порядкового типа, обрабатывается так же, как если бы он был порядковый типа.

Если оба операнда в операторах +, -, *, div или mod являются операндами целого типа, то тип результата будет таким же, как общий тип обоих операндов. Общим типом является встроенный целочисленный тип с наименьшим диапазоном, включающим все возможные значения обоих типов.

Например, общим типом для Integer и Byte является тип Integer, а общим типом для Integer и Word является LongInt. Действие выполняется в соответствии с точностью общего типа и типом результата является общий тип.

Перед выполнением любой арифметической операции операнд размером в байт преобразуется в промежуточный операнд размером в слово, что совместимо как с типом Integer, так и с типом Word. Значение одного целочисленного типа может быть явным образом преобразовано к другому целочисленному типу с помощью приведения типов (см. далее).
Если один или оба операнда в операциях +, -, или * имеют вещественный тип, то тип результата будет Real, если использована директива компилятора {$N-}, или типом Extended при использовании директивы компилятора {$N+} (в Turbo Pascal).
^

Логические операции.


Логические (побитовые) операции выполняются поразрядно, над каждым битом операндов в отдельности.

^ Знак операции Операция Тип операндов Тип результата
not битовое отрицание целый целый
and И (битовое) целый целый
or ИЛИ (битовое) целый целый
xor исключающее ИЛИ (битовое) целый целый
shl сдвиг влево целый целый
shr сдвиг вправо целый целый


Примечание: операция not является унарной.

Операция NOT заменяет 0 на 1 и наоборот. Например, для байта со значением 5 (двоичный код 00000101) not 5 дает 250 (код 11111010);

Операция AND дает 1, когда в обоих разрядах 1, и 0 в остальных случаях. Например, 13 and 7 дает 5 (00001101 and 00000111 = 00000101);

Операция OR дает 0, когда в обоих разрядах 0, и 1 в остальных случаях. Например, 13 or 7 дает 15 (00001101 or 00000111 = 00001111);

Операция XOR дает 1, когда цифры в обоих разрядах не совпадают, и 0 в остальных случаях. Например, 13 xor 5 дает 248 (00001101 xor 00000101 = 11111000); Замечательно, что повторное применение xor восстанавливает исходное значение памяти. В данном примере (00001101 xor 11111000) = 00000101; (11111000 xor 00000101) = 00001101;

Операции I shl J и I shr J сдвигают значение I влево или вправо на J битов. Тип результата будет таким же, как тип I. Например, 13 shr 2 дает 3; 13 shl 2 дает 52;
^

Булевские операции

Оператор Операция ^ Тип операндов Тип результата
not отрицание Boolean Boolean
and логическое И Boolean Boolean
or логическое ИЛИ Boolean Boolean
xor логическое исключающее ИЛИ Boolean Boolean

Примечание: операция not является унарной.

Результаты этих операций соответствуют обычной булевой логике. Например, выражение А and В принимает значение True только в том случае, если оба операнда имеют значение True.

В Turbo Pascal поддерживаются две различные модели генерации кода для операций or и and - полное вычисление и вычисление по короткой схеме (частичное вычисление). Вычисление по короткой схеме обеспечивает строгое вычисление слева направо. Это вычисление прекращается, как только результат всего выражения становится очевиден. Во многих случаях эта модель удобна, поскольку она обеспечивает минимальное время выполнения, и, как правило, минимальный объем кода. Вычисление по короткой схеме делает также возможным такие конструкции, которые в противном случае были бы недопустимы, например:

while (I <= Length(S)) and (S[I] <> ' ') do Inc(I);

while (P <> nil) and (P^.Value <> 5) do P:= P^.Next;

В обоих случаях, если результатом первого вычисления будет значение False, второе вычисление не выполняется.
^

Строковые операции

Оператор Операция ^ Тип операнда Тип результата
+ конкатенация строковый, символьный строковый


Turbo Pascal позволяет использовать оператор + для объединения двух строковых операндов. Результатом операции S+T, где S и T имеют строковый тип или символьный, будет конкатенация S и T. Если длина результирующей строки превышает 255 символов, то она усекается до 255 символов.
^


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: