Выполнение групповых булевых операций

32-хprocedure BOOL ( Dop: TStr_Bit; Vid_op: Byte);
16-тиprocedure Bool_op (StrBaz, Dop: PStr_bit; Index, Vid_op: word);

Dop  - дополнительная строка для выполнения булевых операций;
StrBaz  - первичная строка для выполнения булевых операций;
Index  – позиция бита в переменной StrBaz  (0…длина переменной).

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

Выполняемые операции и значения параметра - Vid_op:
Название операцииЗначение Vid_opОпределение операции
0011
0101
“И” - логическое умножениеbtAND0001
сложение по модулю 2btXOR0110
“ИЛИ” - логическое сложениеbtOR0111

Работа процедуры отличается в 32-х и 16-ти разрядных версиях библиотек, поэтому приведем раздельное описание. Суть различия заключается в том, что в 16-ти разрядной версии осуществляется предварительный сдвиг начала дополнительной последовательности относительно базовой, а потом выполнение операции, при этом обе битовых последовательности не изменяются. В 32-х разрядной версии сдвига не осуществляется а базовая последовательность изменяется, так как она хранится в битовой переменной результата операции.

32-Х РАЗРЯДНАЯ ВЕРСИЯ

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

16-ТИ РАЗРЯДНАЯ ВЕРСИЯ

Принцип функционирования 16-ти битной версии процедуры поясняет рисунок:

Принцип работы подпрограммы Bool_op:

В ней осуществляется булево преобразование последовательности бит переменной StrBaz , начиная с позиции Index , и битовой последовательности Dop.   Результат преобразования записывается в текущую битовую переменную.

Например, переменная StrBaz (BitStr)  содержит битовую последовательность вида (110100011100100), а переменная Dop   - (010101000). После выполнения операции сложения по модулю 2 (для примера, приведенного в таблице) текущая строка BitStr  будет содержать битовую последовательность вида:

После выполнения операции логического сложения (для примера, приведенного в таблице) текущая строка - BitStr  будет содержать битовую последовательность вида:

Обратите внимание, что не происходит изменения битовых последовательностей в переменных, передаваемых в качестве параметра.
32-х

Var BitStr, Dopoln : TStr_bit; {Объявление переменной}


BitStr.BOOL(Dopoln, btXOR); {Сложение по модулю 2}
BitStr.BOOL(Dopoln, btOR); {Логическое сложение}

16-ти Var BitStr, StrBaz, Dop : PStr_bit; {Объявление переменной}


BitStr^.Bool_op (StrBaz, Dop, 2, btXOR); {Сложение по модулю 2}
BitStr^.Bool_op (StrBaz, Dop, 12, btOR); {Логическое сложение}