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 | Определение операции | |||
0 | 0 | 1 | 1 | ||
0 | 1 | 0 | 1 | ||
“И” - логическое умножение | btAND | 0 | 0 | 0 | 1 |
сложение по модулю 2 | btXOR | 0 | 1 | 1 | 0 |
“ИЛИ” - логическое сложение | btOR | 0 | 1 | 1 | 1 |
Работа процедуры отличается в 32-х и 16-ти разрядных версиях библиотек, поэтому приведем раздельное описание. Суть различия заключается в том, что в 16-ти разрядной версии осуществляется предварительный сдвиг начала дополнительной последовательности относительно базовой, а потом выполнение операции, при этом обе битовых последовательности не изменяются. В 32-х разрядной версии сдвига не осуществляется а базовая последовательность изменяется, так как она хранится в битовой переменной результата операции.
Процедура выполняет логические операции с двумя битовыми последовательностями в соответствии с правилами булевой алгебры, заданными параметром Vid_op, причем текущая переменная одновременно хранит, как одну из преобразуемых последовательностей бит, так и результат преобразования. После выполнения булевой операции длина битовой переменной может уменьшиться, так как длина результирующей последовательности битов равна минимальной длине преобразуемых последовательностей (завершающие биты более длинной последовательности отбрасываются).
Принцип функционирования 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} … |
16-ти | Var BitStr, StrBaz, Dop : PStr_bit; {Объявление переменной} … BitStr^.Bool_op (StrBaz, Dop, 2, btXOR); {Сложение по модулю 2} … |