Руководство по языку B.Pascal 7


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


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

Таблица 6.5 Булевские операции -----------T------------------T-----------------T--------------- ¦ Операция ¦ Действие ¦ Типы операндов ¦ Тип результата¦ +----------+------------------+-----------------+---------------+ ¦ not ¦ Отрицание ¦ Булевский ¦ Булевский ¦ ¦ and ¦ Логическое И ¦ Булевский ¦ Булевский ¦ ¦ or ¦ Логическое ИЛИ ¦ Булевский ¦ Булевский ¦ ¦ xor ¦ Логическое ¦ ¦ ¦ ¦ ¦ исключающее ИЛИ ¦ Булевский ¦ Булевский ¦ L----------+------------------+-----------------+----------------

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

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

В Borland Pascal поддерживаются две различные модели генера- ции кода для операций 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, вычисление второго выражения не выполняется.

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

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




- Начало -  - Назад -  - Вперед -