Программирование. Принципы и практика использования C++ Исправленное издание, стр. 357
Следует подчеркнуть, что оператор
&&&|||&&||truefalseРассмотрим несколько примеров. Обычно битовые комбинации выражаются в шестнадцатеричном виде. Для полубайта (четыре бита) используются следующие коды.

Для представления чисел, не превышающих девяти, можно было бы просто использовать десятичные цифры, но шестнадцатеричное представление позволяет не забывать, что мы работаем с битовыми комбинациями. Для байтов и слов шестнадцатеричное представление становится действительно полезным. Биты, входящие в состав байта, можно выразить с помощью двух шестнадцатеричных цифр.

Итак, используя для простоты тип
unsignedunsigned char a = 0xaa;unsigned char x0 = ~a; // дополнение a
unsigned char b = 0x0f;unsigned char x1 = a&b; // a и b
unsigned char x2 = a^b; // исключительное или: a xor b
unsigned char x3 = a<<1; // сдвиг влево на один разряд
Вместо бита, который был “вытолкнут” с самой старшей позиции, в самой младшей позиции появляется нуль, так что байт остается заполненным, а крайний левый бит (седьмой) просто исчезает.
unsigned char x4 == a>>2; // сдвиг вправо на два разряда
В двух позициях старших битов появились нули, которые обеспечивают заполнение байта, а крайние правые биты (первый и нулевой) просто исчезают.
Мы можем написать много битовых комбинаций и потренироваться в выполнении операций над ними, но это занятие скоро наскучит. Рассмотрим маленькую программу, переводящую целые числа в их битовое представление.
int main(){ int i; while (cin>>i) cout << dec << i << "==" << hex << "0x" << i << "==" << bitset<8*sizeof(int)>(i) << '\n';}Для того чтобы вывести на печать отдельные биты целого числа, используется класс
bitsetbitset<8*sizeof(int)>(i)Класс
bitset8*sizeof(int)bitsetiПОПРОБУЙТЕ
Скомпилируйте программу для работы с битовыми комбинациями и попробуйте создать двоичные и шестнадцатеричные представления нескольких чисел. Если вас затрудняет представление отрицательных чисел, перечитайте раздел 25.5.3 и попробуйте снова.
25.5.2. Класс bitset
Для представления наборов битов и работы с ними используется стандартный шаблонный класс
bitset<bitset>bitsetbitset<4> flags;bitset<128> dword_bits;bitset<12345> lots;Объект класса
bitsetbitsetbitset<4> flags = 0xb;bitset<128> dword_bits(string("1010101010101010"));bitset<12345> lots;Здесь объект
lotsdword_bitsbitset'0''1'std::invalid_argumentstring s;cin>>s;bitset<12345> my_bits(s); // может генерировать исключение // std::invalid_argumentК объектам класса
bitsetb1b2b3bitset