|
Программирование >> Аргументация конструирования
Оператор & определяется так: l(true) & 1 (true) равно!(true) 1 (true) & О (false) равно О(false) О(false) 5 О (false) равно О(false) 0 (false) & 1 (true) равно О(false) Для оператора : l(true) I 1 (true) равно l(true) 1 (triae) f О (false) равно l(true) О (false) 1 О (false) равно О (false) О (false) ! 1 (triae) равно l(true) Для последнего логического оператора, называемого исключающим или прямой аналог в повседневной жизни найти труднее. Он возвращает значение true, если истинным является какой-то один (но не оба!) из его аргументов. Таблица истинности этого оператора представлена ниже (табл. 4.3). Таблица4.3. Таблица истинности оператора- ~1 W 1 о 1 о Теперь, зная, как работают эти операторы с отдельными битами, рассмотрим их применение к двоичным числам. Использование битовых операторов Битовые операторы выполняются подобно любым другим арифметическим операторам. Самым легким для понимания является оператор Выполнить операцию ~ над числом означает выполнить ее над каждым битом числа. -01102 (0x6) 1001г (Сх9) Таким образом получаем, чт равно 0x9. В следующем примере продемонстрировано выполнение оператора ОНО?. & ООНг 00102 Вычисляем, начиная со старших битов: 0 & 0 равно 0. В следующем бите 1 0 равно 0. В третьем бите 1 & 1 дает 1, а в носледнем бите О & 1 дает 0. Те же вычисления могут быть выполнены в шестнадцатеричной системе. Для этого нужно преобразовать числа в двоичное представление, выполнить операцию и преобразовать результат обратно. 0x06 ОНОг & & 0x03 00112 0x02 ООЮг Расписав числа таким образом, мы получили, что Охб & 0x3 равно 0x2. (Попробуйте подсчитать значение выражения 0x6 0x3. Если вам это удастся, вы почувствуете себя на седьмом небе. Иначе очутитесь на первой из семи ступенек в преисподнюю. У меня на это ушло чуть меньше восьми минут.) Простой пример Следующая программа иллюстрирует работу побитовых операторов. В пей инициируются две переменные, к которым применяются операции , Результаты вычислений выводятся на экран. BitTest - инициируются две переменные и выводятся ьтаты выполнения операторов &, I и Sinclude <stdio,h> #include <iostream,h> in Unt пАтд, char* pszArgs[]) { установка вывода цатсричном виде cout, setf (ios : :hex, ios::hex),- инициализация двух аргументов int nArgl = 0x123 4; int nArg2 = OxOOff; Выполнение логических операций Сначала применяем унарный оператор NOT cout Aigi = Ox nArgl Ли ; Qy <;< Arg2 << -nArgl cout cout ~nArg2 Ox nArg2 \n ; = Ox -nArgl \n ; = Ox -nArg2 \n ; Теперь бинарные операторы Ох
rettmС), Первая инструкция нашей программы (та, которая следует за ключевым словом main) - cout. setf (ios: :iiex) ; - меняет используемый по умолчанию десятичный формат вывода на шестнадцатеричный (поверьте мне, это сработает). В остальном программа очевидна. Присвоив значения аргументам nArgl, nArg2, она выводит все варианты побитовых вычислений над этими переменными. Результат выполнения программы будет выглядеть следующим образом: Argl = 0x1234 Arg2 Qxff -nArgl = Oxffffedcb ~nArg2 = OxffififOO nAgl S nArg2 = 0x34 nArgl I nArg2 = 0xl2ff nArgl nArg2 = 0xl2cb К шестнадцатеричным числам всегда приписывается префикс Ох. Зачем придуманы эти глупые операторы Предназначение большинства операторов очевидно. В необходимости операторов - или + сомневаться не приходится. Не нужно рассказывать, для чего используется оператор . Но для начинающих программистов может быть далеко не очевидно, зачем использовать битовые операторы. Оператор & часто используется для маскирования информации. Например, предположим, что нам нужно выделить последний значимый шестнадцатеричный разряд из четырехразрядного числа: 0x1234 0001 0010 ООН 0100 & & OxOOOF 0000 0000 0000 1111 0x0004 0000 0000 0000 0100 С помощью этого оператора можно также выделять и устанавливать значения отдельных битов. Представьте себе, что в написанной вами базе данных для сохранения некоторой информации о личности используется единственный бит. Первый значимый бит равен 1. если это особа мужского пола, второй бит равен 1, если это программист, третий равен 1 в случае внешней привлекательности, а четвертый - если человек имеет собаку. Взгляните на табл. 4.4. Таблица 4.4. Значения битов Бит ЗНАЧЕНИЕ 0 мужчина 1 -> программист 2 1 -> привлекательный 3 1 -> владелец собаки Не особо привлекательный, имеющий собаку программист мужского рода будет закодирован числом IIOI2. Если вы хотите просмотреть все записи в поисках хорошенькой девушки без собаки, причем неважно, разбирается ли она в C++, надо использовать следующее сравнение (числа приведены в двоичной записи!): (daCabaseValue & 1011) == 0010 - не мужчина - привлекательна - без собаки - важно * - не интересует В этом случае число 1011 является маской, потому что оно маскирует, исключая из рассмотрения, биты с не интересующими вас характеристиками.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |