Логический тип данных, названный в честь английского математика 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 вообще не проверяется, так как при любом его значении результат всего выражения уже известен.
Тип данных CHAR имеет свои особенности. Дело в том, что для представления букв цифрами в памяти компьютера используются разнообразные кодовые таблицы. Можно кодировать букву "А" единицей, а можно – числом 64. Особенно большую путаницу вызывают русские буквы.
История вопроса такова. В 70-е гг. ХХ века для русских букв в основном применялась российская кодировка КОИ8 (код отображения информации). С появлением персональных компьютеров была разработана кодировка cp866, применяющаяся в операционной системе MS DOS. Эта кодировка была узаконена государственным стандартом. С появлением Windows 3.1 фирма Microsoft ввела новую кодировку Win1251, что вызывало достаточно странную проблему перевода файлов с русского языка на русский. Одновременно в операционных системах Unix/Lunix и в части российского Интернета почему-то стали применять КОИ8, что привело к еще большей путанице. В середине 90-х годов кодировка КОИ8 была узаконена постановлением правительства РФ, что вызывает, по меньшей мере, удивление – на большинстве персональных компьютеров ее использование не предусмотрено. С выходом Window95, учитывая многочисленные жалобы зарубежных пользователей, Microsoft ввел "окончательную" кодировку Unicode. В ней каждая буква кодируется не одним, а двумя байтами, что дает 65556 комбинаций. В Unicode уместились все символы всех алфавитов Земли, включая китайский, арабский, японский языки. Используя эту кодировку, можно набрать текст вида بةثحطعف. Увы, надежды на то, что с переходом на Unicode с путаницей будет покончено, не оправдались. Половина Интернета по-прежнему использует КОИ8, а Microsoft поленился добавить русские буквы в большую часть шрифтов.
С типом CHAR работают следующие процедуры и функции:
ORD(c) – возвращает код символа c; CHR(n) – возвращает символ с кодом n.
Тип CHAR упорядочен по алфавиту: ‘A’<‘B’<‘C’…<‘Z’ Это позволяет сравнивать буквы для их алфавитной сортировки. Наконец, тип CHAR эквивалентен типу BYTE – оба они занимают один и тот же объем памяти. Для эквивалентных типов можно применять операцию типизации, заключающуюся в преобразовании типа в нужный. Например, чтобы напечатать символ с кодом n, необязательно делать так:
Label1.Caption:=CHR(n);
Есть другой способ:
Label1.Caption:=CHAR(n);
Здесь CHAR() – операция типизации. Возможна и обратная процедура для получения кода символа: