Логическая операция | Пример | Правило |
«ИЛИ» (сложение) | 1010 OR11001110 | Результат единица, если ХОТЯ БЫ ОДИН из операндов равен единице. |
«И» (умножение) | 1010 AND11001000 | Результат единица, если ОБА операнда равны единице. |
«Исключающее ИЛИ» (сравнение) | 1010 XOR11000110 | Результат единица, если операнды ОТЛИЧАЮТСЯ. |
«НЕ» (отрицание) | 1010 NOT0101 | Результат единица, если операнд РАВЕН НУЛЮ. |
Заменив в этих правилах единицу на TRUE, а ноль на FALSE, вы получите правила для булевых данных.
Сдвиг – одна из тех операций обработки регистров, которые выполняют все процессоры. В Паскале тоже предусмотрены две такие операции с числами: сдвиг влево (SHL) и сдвиг вправо (SHR).
Операция левого сдвига (рис. 109) перемещает все биты слова на заданное число позиций влево, при этом младшие биты заполняются нулями, а старшие теряются, например:
N:= 3; { 3 = 00000011 }
Writeln (N shl 1); { 6 = 00000110 }
Writeln (N shl 2); { 12 = 00001100 }

Операция правого сдвига (рис. 110) перемещает все биты слова на заданное число позиций вправо. При этом старшие биты заполняются нулями, а младшие теряются.
N:= 3; { 3 = 00000011 }
Writeln (N shr 1); { 1 = 00000001 }
Writeln (N shr 2); { 0 = 00000000 }

Совместив сдвиг с логическими операциями, можно исследовать отдельные биты слова. Перед вами булева функция TestBit, принимающая два параметра: ARG – число, в котором проверяется состояние некоторого бита, и BIT – номер этого бита. Функция возвращает TRUE, если проверяемый бит содержит единицу, и FALSE в противном случае.
function TestBit (arg: longint; bit : byte): Boolean;