Работа с битова логика
Работа с битова логика
- размер на шрифта намалете размера на шрифта увеличете размера на шрифта
- Печат
Двоична математика, работа с битова логика
Заедно с обичайните булеви операции с булеви типове, често е необходимо да се извършват операции с отделни битове, обикновено използвани като флагове. Разбирането на логическите операции е от съществено значение за ефективната работа.
Pascal поддържа следните логически операции
- И - логично И;
- ИЛИ - (включително) логическо ИЛИ;
- XOR - (изключително) логическо ИЛИ;
- NOT - отрицание или инверсия на бит;
- SHL - логическа смяна наляво;
- SHR - логическа смяна надясно.
Други логически операции с числата не са включени в Pascal, но са достъпни чрез асемблерни вложки.
Всеки бит може да има само две състояния FALSE или TRUE
Състоянието на малко може да бъде описано с други думи, някои от които идват от математиката, някои от електрониката, други от логиката.
За FALSE алтернативите са NONE, ZERO, DISABLED, NOT INSTALLED, CLEARED, FALSE, F, 0, - и други.
За TRUE алтернативите са YES, ONE, ON, INSTALLED, INCLUDED, TRUE, T, 1, + и други.
Нека разгледаме тези операции отделно.
И - логично И, тази операция изглежда така
Изразът е истина, когато и двата бита са истина. Поговорката "И там и там"
ИЛИ - (включително) логическо ИЛИ, тази операция изглежда така
Изразът е истина, когато поне един бит е истина. Поговорката "ИЛИ там ИЛИ там, включително и там и там"
XOR - (изключително) логично ИЛИ, тази операция изглежда така
Изразът е истина, когато само един бит е истина. Поговорката "ИЛИ там ИЛИ там, с изключение както там, така и там"
NOT - отрицание или инверсия на бит, тази операция се отнася само за един бит, действието на обикновената текуща стойност на бита е обърнато
SHL - логическа смяна наляво, операцията се отнася само за група битове, един от целочислените типове на Паскал, например байт, дума и т.н.
Shift байт наляво един бит.
Преместете байт наляво с две цифри.
Байтът се измества наляво с една или повече цифри, позициите вдясно се заменят с нули, позициите вляво се губят.
SHR - логическо изместване надясно, операцията се прилага само за група битове, един от целочислените типове на Паскал, например байт, дума и т.н.
Преместете байт надясно с един бит.
Преместете байт надясно с две цифри.
Байтът се измества надясно с една или повече цифри, позициите вляво се заменят с нули, позициите вдясно се губят.
Това завършва описанието на операциите и ние преминаваме към практически примери. Но първо, няколко думи за нотация
Нотация, използвана при показване на числа в литературата
Обичайно е цифрите да се показват в символна форма, така че най-малко значимите цифри да са вдясно, а линиите вляво и ако се използва подравняване, то също се подчинява на тези правила.
Номерирането на цифрите започва от нула в съответствие със степента на цифрата и се описва с формулата K * M ^ N, където K е коефициент в диапазона от 0 до M-1, M е основата на числото, и N е степента. Числото в степен 0 за всички бази е 1.
Нека разгледаме примера на следващата таблица за четири основни основи.
Основа
Стойност
Формула
1 * 10 ^ 2 + 0 * 10 ^ 1 + 0 * 2 ^ 0
1 * 16 ^ 2 + 0 * 16 ^ 1 + 0 * 2 ^ 0
Основа
Стойност
Формула
Невалидна комбинация
1 * 10 ^ 2 + 2 * 10 ^ 1 + 3 * 10 ^ 0
1 * 16 ^ 2 + 2 * 16 ^ 1 + 3 * 16 ^ 0
В началото ще бъдат разгледани няколко прости примера за използване на логически операции и в крайна сметка приложението на тези техники за работа с директории.
Получаване на позицията на бит или неговата стойност
В този пример, един се премества наляво с необходимия брой цифри и резултатът е двоична стойност, равна на 2 ^ N, където е зададен един единствен бит, съответстващ на цифрата на числото. Тази техника може да се използва с променлива за изчисляване на позицията по време на изпълнение или по време на компилация; във втория случай няма да се генерира код и компилаторът просто ще изчисли стойността и ще я замести в програмата, без да генерира допълнителен код. Това е полезно за посочване на битово число, без да се представя като десетична или шестнадесетична константа. Но по-често е по-удобно да се използват посочени константи, тъй като те са по-информативни, примери за това ще бъдат дадени в края на статията.