Логический тип

 

Логический тип данных, названный в честь английского математика XIX века Дж. Буля кажется очень простым. Но с ним связан ряд интересных моментов.

Во-первых, к данным этого типа применимы логические операции AND, OR, XOR, NOT. Как правило, труднее всего понять операцию "исключающее ИЛИ" (XOR). Ее смысл: "или одно, или другое, но не оба сразу". Поэтому True XOR False=True, но True XOR True=False.

Во-вторых, допустимы присваивания вида:

 

VAR l:BOOLEAN;

l:=(a>b) OR (c<4);

 

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

 

IF (a>b) AND (d<0) THEN c:=TRUE

ELSE c:=FALSE;

 

Все гораздо проще:

 

c:=(a>b) AND (d<0);

 

В-третьих, операции AND и OR могут быть выполнены при неизвестном втором операнде:

 

IF (a>5) AND (c<d) THEN…

 

Если a<=5, то условие c<d вообще не проверяется, так как при любом его значении результат всего выражения уже известен.

 

В Object Pascal имеется пять логических типов: Boolean ByteBool, Bool, WordBool и LongBool, отличающиеся занимаемым объемом памяти (Таблица 15.4).

 

Таблица 15.4 - Логические типы данных

Название Размер, байт
Boolean
ByteBool
Bool
WordBool
LongBool

 

В стандартном Паскале определен только тип Boolean, остальные логические типы введены в Object Pascal для совместимости с Windows: типы Boolean и ByteBool занимают по одному байту каждый, Bool и WordBool - по 2 байта, LongBool - 4 байта. Значениями логического типа может быть одна из предварительно объявленных констант False (ложь) или True (истина).

 

При этом справедливы следующие условия:

 

False < True;

Ord(False) = 0;

Ord(True) <> 0;

Succ(False) = True;

Pred(True) = False.

 

Фактически для всех логических типов значению False соответствует число 0, которое записывается в указанное в Таблица 15.4 количество байтов. Отличие логических типов заключается в величине параметра, соответствующего значению True. В величинах типа Boolean этому значению соответствует число 1, а для других типов результату True соответствует любое значение, отличное от нуля. Функция Ord(True) для Boolean вернет 1, а для всех других логических типов возвратит (-1).