Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Паскаль / tp3 / tp3 / 6.doc
Скачиваний:
19
Добавлен:
10.12.2013
Размер:
110.59 Кб
Скачать

Xor Исключающее или Целый Целый

(битовое)

shl Сдвиг влево Целый Целый

shr Сдвиг вправо Целый Целый

──────────────────────────────────────────────────────────

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

Если операндом операции not является операнд целого типа, то результат будет также целого типа.

Если оба операнда в операциях or, and или xor целого типа, то тип результата будет таким же, как тип обоих операндов.

Операции i shl j и i shr j сдвигают значение i влево или вправо на j бит. Тип результата будет таким же, как тип i.

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

Типы операндов и результат для булевских операций показаны в Таблице 6.5.

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

───────────────────────────────────────────────────────────

Операция Действие Типы операндов Тип результата

───────────────────────────────────────────────────────────

not Отрицание Булевский Булевский

and Логическое И Булевский Булевский

or Логическое ИЛИ Булевский Булевский

Xor Логическое

исключающее ИЛИ Булевский Булевский

───────────────────────────────────────────────────────────

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

Результаты этих операций соответствуют обычной булевой логике. Например, выражение a and b является истинным (принимает значение Тruе) только в том случае, если оба операнда a и b имеют истинное значение (Тruе).

В Турбо Паскале поддерживаются две различные модели генерации кода для операций or и and - полное вычисление и вычисление по короткой схеме (частичное вычисление).

При полном вычислении подразумевается, что каждый операнд булевского выражения, построенный с помощью операций or и and, всегда будет вычисляться, даже если результат всего выражения уже известен. Эта модель полезна в том случае, когда один или более операндов в выражении представляют собой функции с побочными эффектами, которые изменяют смысл программы.

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

while (I<=Lenght(S)) and (S[I]<>' ') do

Inc(I);

while (P<>nil) and (P^.Value<>5) do

P:=P^.Next;

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

Схему вычисления можно задавать с помощью директивы компилятора $В. Значением по умолчанию является состояние {$В-} (пока оно не будет изменено с помощью меню возможностей компилятора Options). В этом случае генерируется код с вычислением по короткой схеме. В случае директивы {$В+} генерируется код с полным вычислением.

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

Операции со строками

Типы операндов и результаты для операции со строками показаны в Таблице 6.6.

Таблица 6.6 Операции со строками

─────────────────────────────────────────────────────────

Операция Действие Типы операндов Тип результата

─────────────────────────────────────────────────────────

+ Конкатенация Строковый, Строковый

символьный или

упакованный строковый

─────────────────────────────────────────────────────────

Турбо Паскаль позволяет использовать операцию + для объединения двух строковых операндов. Результатом операции s + t, где s и t имеют строковый тип, символьный тип или упакованный строковый тип, будет конкатенация s и t. Результат будет совместим с любым строковым типом (но не с символьным и не с упакованным строковым типом). Если длина результирующей строки превышает 255 символов, то она усекается до 255 символов.

Операции PChar

Расширенный синтаксис (директива компилятора {$X+}) поддерживает несколько новых операций над символьными указателями. Для увеличения или уменьшения смещения в значении указателя можно использовать операции плюс (+) и минус (-). Операцию минус (-) можно использовать для вычисления расстояния (разности смещений) между двумя символьными указателями. Прпедположим, что P и Q представляют собой значения тип PChar, а I - значение типа Word. Тогда допустимы следующие конструкции:

P + I I прибавляется к смещению P

I + P I прибавляется к смещению P

P - I I вычитается из смещения P

P - Q Смещение Q вычитается из смещения P

В операциях P + I и I + P I прибавляется к адресу, задаваемому P. При этом получается указатель, который указывает на I символов после P. В операции P - I I вычитается из адреса, задаваемого P, и получается указатель, указывающий на I символов до P.

Операция P - Q вычисляет расстояние между Q (младший адрес) и P (старший адрес). При этом возвращается результат типа Word, показывающий число символов между Q и P. Эта операция предполагает, что P и Q указывают на один и тот же массив символов. Если эти два указателя указывают на разные символьные массивы, то результат непредсказуем.

Операции над множествами

Типы операндов для операций над множествами показаны в Таблице 6.7.

Таблица 6.7 Операции над множествами

───────────────────────────────────────────────────────────

Операция Действие Типы операндов

───────────────────────────────────────────────────────────

+ Объединение Множества с совместимыми типами

- Разность Множества с совместимыми типами

* Пересечение Множества с совместимыми типами

───────────────────────────────────────────────────────────

Результаты операций соотвествуют правилам логики работы с множествами:

1. Перечислимое значение c содержится в a+b только тогда, когда оно содержится в a или в b.

2. Перечислимое значение c содержится в a-b только тогда, когда оно содержится в a и не содержится в b.

3. Перечислимое значение c содержится в a*b только тогда, когда он содержится в обоих множествах a и b.

Если наименьшим перечислимым значением, которое является членом результата операций над множествами, является a, а наибольшиим - b, то типом результата будет множество a..b.

Операции отношения

Типы операндов и результаты операций отношения приведены в Таблице 6.8.

Таблица 6.8 Операции отношения

───────────────────────────────────────────────────────────

Операция Действие Типы операндов Тип результата

───────────────────────────────────────────────────────────

= Равно Совместимый простой, Булевский

указатель, множественный,

строковый или упакованный

строковый

<> Не равно Совместимый простой, Булевский

указатель, множественный,

строковый или упакованный

строковый

< Меньше чем Совместимый простой, Булевский

указатель, множественный,

строковый или упакованный

строковый

> Больше чем Совместимый простой, Булевский

указатель, множественный,

строковый или упакованный

строковый

<= Меньше Совместимый простой, Булевский

или равно указатель, множественный,

строковый или упакованный

строковый

>= Больше Совместимый простой, Булевский

или равно указатель, множественный,

строковый или упакованный

строковый

<= Подмножество Множества совместимых Булевский

типов

>= Надмножество Множества совместимых Булевский

типов

Соседние файлы в папке tp3