С++ для начинающих



         

Побитовые операторы


Таблица 4.3. Побитовые операторы

Символ операции

Значение

Использование

~

Побитовое  НЕ

~expr

<< 

Сдвиг влево

expr1 << expr2

>> 

Сдвиг вправо

expr1 >> expr2

&

Побитовое И

expr1 & expr2

^

Побитовое ИСКЛЮЧАЮЩЕЕ ИЛИ

expr1 ^ expr2

|

Побитовое ИЛИ

expr1 | expr2

&=

Побитовое И с присваиванием

expr1 &= expr2

^=

Побитовое ИСКЛЮЧАЮЩЕЕ ИЛИ с присваиванием

expr1 ^= expr2

|=

Побитовое ИЛИ с присваиванием

expr1 |= expr2

<<=

Сдвиг влево с присваиванием

expr1 <<= expr2

>>=

Сдвиг вправо с присваиванием

expr1 >>= expr2

Побитовые операции рассматривают операнды как упорядоченные наборы битов, каждый бит может иметь одно из двух значений – 0 или 1. Такие операции позволяют программисту манипулировать значениями отдельных битов. Объект, содержащий набор битов, иногда называют битовым вектором. Он позволяет компактно хранить набор флагов – переменных, принимающих значение “да” “нет”. Например, компиляторы зачастую помещают в битовые векторы спецификаторы типов, такие, как const и volatile. Библиотека iostream использует эти векторы для хранения состояния формата вывода.

Как мы видели, в С++ существуют два способа работы со строками: использование C-строк и объектов типа string стандартной библиотеки – и два подхода к массивам: массивы встроенного типа и объект vector. При работе с битовыми векторами также можно применять подход, заимствованный из С, – использовать для представления такого вектора объект встроенного целого типа, обычно unsigned int, или класс bitset стандартной библиотеки С++. Этот класс инкапсулирует семантику вектора, предоставляя операции для манипулирования отдельными битами. Кроме того, он позволяет ответить на вопросы типа: есть ли “взведенные” биты (со значением 1) в векторе? Сколько битов “взведено”?

В общем случае предпочтительнее пользоваться классом bitset, однако, понимание работы с битовыми векторами на уровне встроенных типов данных очень полезно. В этом разделе мы рассмотрим применение встроенных типов для представления битовых векторов, а в следующем – класс bitset.




Содержание  Назад  Вперед