Логические выражения и операции. Булевый тип данных
Простые логические выражения
Для того, чтобы программа была не линейной (т.е. в зависимости от ситуации выполнялись разные инструкции) в языках программирования используются логические выражения, результат которых может быть либо правдой (true
), либо ложью (false
). Результат логических выражений обычно используют для определения пути выполнения программы.
Простые логические выражения являются результатом операций отношения между двумя операндами (значениями). В примерах ниже операндами являются значения переменных x и y. Операндами могут быть числа, символы и другие типы данных. Все что можно сравнивать между собой. Однако не рекомендуют сравнивать вещественные числа из-за особенностей их хранения в памяти компьютера.
В Паскале предусмотрены следующие операторы отношений:
- меньше:
x < y
- больше:
x > y
- равно:
x = y
- не равно:
x <> y
- меньше или равно:
x <= y
- больше или равно:
x >= y
Булевы типы
Результатом логического выражения всегда является булево (логическое) значение. Булев тип данных (boolean
) может принимать только два значения: true
(истина) или false
(ложь). Эти величины упорядочены следующим образом: false < true
.
var
x, y: boolean;
begin
x := true;
y := false;
writeln('x = ', x);
writeln('y = ', y);
writeln('x < y = ', x < y);
end.
Результат выполнения:
x = TRUE
y = FALSE
x < y = FALSE
Операции and
, or
, not
(применяемые к булевским операндам) дают булевские значения.
Это значит, что данные булевого типа являются не только результатом операций отношения, но и могут выступать в роли операндов операции отношения. Также к ним можно применять функции ord
, succ
, pred
, процедуры inc
и dec
.
Значение типа boolean
занимает в памяти 1 байт.
В примере шести булевым переменным присваиваются значения простых логических выражений. Значения, хранимые в таких переменных, затем выводятся на экран.

Кроме типа boolean
в Pascal введены еще три булевых типа — bytebool
(занимает 1 байт), wordbool
(занимает 2 байта) и longbool
(занимает 4 байта).
Для всех булевых типов значению false
соответствует 0, а значению true
— любое ненулевое значение. Логические переменные, принадлежащие разным булевым типам, ведут себя по-разному при выполнении над ними операций. Ниже приводится пример, реализованный на языке FreePascal (в комментариях отображается результат).
var
b:boolean;
wb:wordbool;
begin
b:= false;
b:= pred(b);
writeln(b,' ',ord(b)); // TRUE 255
writeln(b=true); // TRUE
wb:= false;
wb:= pred(wb);
writeln(wb,' ',ord(wb)); // TRUE -1
b:= true;
b:= succ(b);
writeln(b,' ',ord(b)); // TRUE 2
wb:= true;
wb:= succ(wb);
writeln(wb,' ',ord(wb)); // FALSE 0
end.
Логические операции
С помощью логических операторов можно формировать сложные логические выражения. Логические операторы часто применяются по отношению к простым логическим выражениям.
В языке программирования Pascal предусмотрены следующие логические операции:
-
Конъюнкция (логическое умножение, пересечение) -
and
. Выражениеa and b
дает значениеtrue
только в том случае, если a и b имеют значениеtrue
. Во всех остальных случаях значения выраженияa and b
даетfalse
.true and true = true true and false = false false and true = false false and false = false
-
Дизъюнкция (логическое сложение, объединение) –
or
. Выражениеa or b
дает значениеfalse
только в том случае, если a и b имеют значениеfalse
. Во всех остальных случаях результат –true
.true or true = true true or false = true false or true = true false or false = false
-
Отрицание (инверсия) –
not
. Выражениеnot a
имеет значение, противоположное значению a.not true = false not false = true
-
Исключающее ИЛИ –
xor
. Выражениеa xor b
дает значениеtrue
только в том случае, когда только один из операндов имеет значениеtrue
.true xor true = false true xor false = true false xor true = true false xor false = false
Последовательность выполнения логических операторов: not, and, or.
В языке Паскаль сначала выполняются логические операторы (and
, or
, xor
, not
), а уже потом операторы отношений (>
, >=
, <
, <=
, <>
, =
), поэтому не нужно забывать расставлять скобки в сложных логических выражениях.

Сложные булевы выражения могут не обрабатываться до конца, если продолжение вычислений не изменит результат. Если булево выражение в обязательном порядке нужно обрабатывать до конца, то это обеспечивается включением директивы компиляции {B+}.
Стандартные функции, возвращающие булевые значения
- odd(x) = true, если x нечетный (x целый);
- eoln(x) = true, если встретился конец строки текстового файла x;
- eof(x) = true, если встретился конец файла x.
В остальных случаях эти функции принимают значение false
.