Кроме того, побитовые операции выполняются крайне быстро. Хранение 32 характеристик в одном типе не приводит ни к каким дополнительным затратам.

«Хотя память становится всё дешевле, она всё равно не безгранична. Иногда, при работе с большими объёмами данных, такая экономия с использованием битовых представлений весьма существенна.»
[ Советы ]
Побитовые операции с одним битом...62
Побитовые операторы &, ^, |и ~выполняют логические операции над отдельными битами числа. Если рассматривать 0 как false и 1 как true ( так принято, хотя можно ввести и другие обозначения ), то для оператора ~ справедливо следующее:
~1( true ) равно 0( false )
~0( false ) равно 1( true )
Оператор &определяется так:
1( true ) & 1 ( true ) равно 1( true )
1( true ) & 0 ( false ) равно 0( false )
0( false ) & 0 ( false ) равно 0( false )
0( false ) & 1 ( true ) равно 0( false )
Для оператора |:
1( true ) | 1 ( true ) равно 1( true )
1( true ) | 0 ( false ) равно 1( true )
0( false ) | 0 ( false ) равно 0( false )
0( false ) | 1 ( true ) равно 1( true )
_________________
62 стр. Часть 1. Первое знакомство с С++
Таблица 4.3. Таблица истинности оператора &
& 1 0
1 1 0
0 0 0
В таблице столбцы соответствуют значению одного аргумента, а строки — второго; результат операции находится на пересечении соответствующих строки и столбца. Так, из таблицы видно, что получить в результате операции &можно только если оба операнда равны 1. Далее в табл. 4.4 приведена таблица истинности оператора |( ИЛИ ).
Таблица 4.4. Таблица истинности оператора |
| 1 0
1 1 1
0 1 0
Для последнего логического оператора, называемого "исключающее или" ( XOR), прямой аналог в повседневной жизни найти труднее. Он возвращает значение true , если истинным является какой-то один ( но не оба! ) из его аргументов. Таблица истинности этого оператора представлена ниже ( табл. 4.5 ).
Таблица 4.5. Таблица истинности оператора ^
^ 1 0
1 0 1
0 1 0
Теперь, зная, как работают эти операторы с отдельными битами, рассмотрим их применение к двоичным числам.
Использование побитовых операторов...63
Побитовые операторы работают отдельно с каждым битом.
Побитовые операторы выполняются подобно любым другим арифметическим операторам. Самым лёгким для понимания является оператор ~ . Выполнить операцию ~над числом означает выполнить её над каждым битом числа.
~0110 2( 0х6 )
1001 2( 0x9 )
Таким образом получаем, что ~0x6 равно 0x9 . В следующем примере продемонстрировано выполнение оператора &:
0110 2
&
0011 2
0010 2
Вычисляем, начиная со старших битов: 0 &0 равно 0. В следующем бите 1 & 0 равно 0. В третьем бите 1 &1 даёт 1, а в последнем бите 0 &1 даёт 0.
_________________
63 стр. Глава 4. Выполнение логических операций
Те же вычисления могут быть выполнены в шестнадцатеричной системе. Для этого нужно преобразовать числа в двоичное представление, выполнить операцию и преобразовать результат обратно.
0x06 0110 2
& &
0x03 0011 2
0x02 0010 2
Расписав числа таким образом, мы получили, что 0x6 & 0x3 равно 0x2 . ( Попробуйте подсчитать значение выражения 0х6 | 0x3 . Если вам это удастся, вы почувствуете себя на седьмом небе. Иначе очутитесь на первой из семи ступенек в преисподнюю. У меня на это ушло чуть меньше восьми минут. )
Следующая программа иллюстрирует работу побитовых операторов. В ней инициируются две переменные, к которым применяются операции &, |, ~, ^. Результаты вычислений выводятся на экран.
/* BitTest — инициируются две переменные */
/* выводятся результаты выполнения */
/* операторов |, ^, ~ и & */
#include
#include
Читать дальше