& (побитовое И)

Описание

Оператор побитового И (AND) в C++ – это одиночный амперсанд &, используемый между двумя целочисленными выражениями. Побитовое И работает с каждой битовой позицией окружающих выражений независимо, по следующему правилу: если оба входных бита равны 1, результирующий бит равен 1, в противном случае результат равен 0.

Другой способ выразить это:

0  0  1  1    operand1
0  1  0  1    operand2
----------
0  0  0  1    (operand1 & operand2) - возвращаемый результат

В Arduino тип int – это 16-битное значение, поэтому использование & между двумя выражениями типа int вызывает одновременное выполнение 16 операций И.

Пример кода

В фрагменте кода:

int a =  92;    // в двоичном: 0000000001011100
int b = 101;    // в двоичном: 0000000001100101
int c = a & b;  // результат:  0000000001000100, или 68 в десятичной системе.

Каждый из 16 бит в a и b обрабатывается с помощью побитового И, и все 16 результирующих бит сохраняются в c, что даёт значение 01000100 в двоичной системе, то есть 68 в десятичной.

Одно из наиболее распространённых применений побитового И – выбор определённого бита (или битов) из целочисленного значения, что часто называется маскированием. Ниже приведён пример (специфичный для архитектуры AVR).

PORTD = PORTD & 0b00000011;  // обнуляет биты 2-7, оставляя пины PD0 и PD1 без изменений (xx & 11 == xx)

Смотрите также