Программирование на языке С. Наместников С.М. - 36 стр.

UptoLike

Составители: 

36
unsigned char flags = 0; // 00000000
unsigned char mask = 2; // 00000010
flags |= mask;
Этот код гарантирует, что второй бит переменной flags будет равен 1 без
изменений значений других битов.
Для отключения определенных битов целесообразно использовать две
логические операции: логическое И и логическое НЕ. Допустим, требуется
отключить второй бит переменной flags. Тогда предыдущий пример запишется
следующим образом:
unsigned char flags = 0; // 00000000
unsigned char mask = 2; // 00000010
flags = flags & ~mask;
или
flags &= ~mask;
Работа этих двух операций заключается в следующем. Приоритет операции
НЕ выше приоритета операции И, поэтому переменная mask в двоичной записи
будет иметь вид 11111101. Применяя операцию логического умножения
переменной flags с полученным числом ~mask все биты останутся
неизменными, кроме второго, значение которого будет равно нулю.
Наконец, операция исключающее ИЛИ позволяет переключать заданные
биты переменных.
Идея переключения битов основывается на свойствах
операции исключающего ИЛИ: 1^1 = 0, 1^0 = 1, 0^0 = 0 и 0^1 = 1. Анализ
данных свойств показывает, что если значение бита маски будет равно 1, то
соответствующий бит переменной, к которой она применяется, будет
переключен, а если значение бита маски равно 0, то значение бита переменной
останется неизменным. Следующий пример демонстрирует работу
переключения битов переменной flags.
unsigned char flags = 0; //00000000
unsigned char mask = 2; //00000010
flags ^= mask; //00000010
flags ^= mask; //00000000
Кроме логических операций в языке С++ существуют операции
поразрядного смещения битов переменной. Операция смещения битов влево
определяется знаком << и смещает биты значения левого операнда на шаг,
определенный правым операндом, например, в результате выполнения команды
10001010 << 2;