Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Использование битовых операторов
Битовые операторы выполняются подобно любым другим арифметическим опера- торам. Самым легким для понимания является оператор Выполнить операцию ~ над числом означает выполнить ее над каждым битом числа. (0x6) (Сх9) Таким образом получаем, что равно 0x9. В следующем примере продемонстрировано выполнение оператора
& ООНг
Вычисляем, начиная со старших битов: 0 & 0 равно 0. В следующем бите 1 0 равно 0. В третьем бите 1 1 дает 1, а в последнем бите 0 & 1 дает 0. Те же вычисления могут быть выполнены в шестнадцатеричной системе. Для этого нужно преобразовать числа в двоичное представление, выполнить операцию и преоб- разовать результат обратно. 0x06 & & 0x03 0x02 Расписав числа таким образом, мы получили, что Охб & 0x3 равно 0x2. (Попробуйте подсчитать значение выражения 0x6 | 0x3. Если вам это удастся, вы почувствуете себя на седьмом небе. Иначе очутитесь на первой из семи ступенек в преисподнюю. У меня на это ушло чуть меньше восьми минут.)
50 Часть I. Первое знакомство с C++ Простой пример Следующая программа иллюстрирует работу побитовых операторов. В ней ини- циируются две переменные, к которым применяются операции |, Результаты вычислений выводятся на экран. // BitTest — инициируются две переменные и // выводятся выполнения // операторов и
in t char* { // установка вывода в виде
// инициализация двух аргументов int = 0x1234; int nArg2 =
// Выполнение логических операций // Сначала применяем унарный оператор NOT << "Arg2 = Ох" << - Ох" << = Ох" << nArgl << '•\п" nArg2 << ' << « = Ох" « "\п
// Теперь - бинарные операторы << "nArgl & << (nArgl s << « "nArgl | « (nArgl | << << "nArgl (nArgl nArg2 = nArg2) nArg2 nArg2) Ох"
Ох"
Ох" С);
Первая инструкция нашей программы (та, которая следует за ключевым словом main) — :hex) — меняет используемый умолчанию десятичный формат вывода на шестнадцатеричный (поверьте мне, это сработает). В остальном программа очевидна. Присвоив значения аргументам nArgl, nArg2, она выводит все варианты побитовых вычислений над этими переменными. Результат выполнения программы будет выглядеть следующим образом: = 0x1234 Arg2 Oxff
~nArg2 OxffffffOO nArgl S nArg2 = 0x34 nArgl | nArg2 = 0xl2ff nArgl nArg2 0xl2cb
К шестнадцатеричным числам всегда приписывается префикс Ох. Глава 4. Выполнение логических операций 51 Зачем придуманы эти глупые операторы Предназначение большинства операторов очевидно. В необходимости операторов - или + сомневаться не приходится. Не нужно рассказывать, для чего используется | |. Но для начинающих программистов может быть далеко не очевидно, за- чем использовать битовые операторы. Оператор & часто используется для маскирования информации. Например, пред- положим, что нам нужно выделить последний значимый шестнадцатеричный разряд из четырехразрядного числа:
С помощью этого оператора можно также выделять и устанавливать значения от- дельных битов. Представьте себе, что в написанной вами базе данных для сохранения некоторой информации о личности используется единственный бит. Первый значимый бит ра- вен 1. если это особа мужского пола, второй бит равен 1, если это программист, тре- тий равен 1 в случае внешней привлекательности, а четвертый — если человек имеет собаку. Взгляните на табл. 4.4. Таблица4.4.Значениябитов Бит ЗНАЧЕНИЕ
Не особо привлекательный, имеющий собаку программист мужского рода будет закодирован числом Если вы хотите просмотреть все записи в поисках хоро- шенькой девушки без собаки, причем неважно, разбирается ли она в C++, надо ис- пользовать следующее сравнение (числа приведены в двоичной записи!): & 1011) == 0010
- важно - не мужчина - привлекательна - без собаки * - не интересует В этом случае число 1011 является маской, потому что оно маскирует, исключая из рассмотрения, биты с не интересующими вас характеристиками.
52 Часть I. Первое знакомство с C++ Глава5 |
Последнее изменение этой страницы: 2019-04-19; Просмотров: 214; Нарушение авторского права страницы