Программирование >>  Аргументация конструирования 

1 ... 10 11 12 [ 13 ] 14 15 16 ... 108


Оператор & определяется так:

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 ;

Теперь

бинарные операторы Ох

cout

<<

nArgl &

nArg2

<<

(nArgl s \n ;

nArg2)

<<

cout

nArgl

nArg2

(nArgl

nArg2)

<<

\n ;

cout

<<

nArgl

nArg2

(nArgl

nArg2)

<<

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 является маской, потому что оно маскирует, исключая из рассмотрения, биты с не интересующими вас характеристиками.



1 ... 10 11 12 [ 13 ] 14 15 16 ... 108

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика