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

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

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

0 0 1 1   операнд1
0 1 0 1   операнд2
--------
0 0 0 1   (операнд1 и операнд2) - возвращаемый результат
В Arduino тип int является 16-битным значением, поэтому использование & между двумя выражениями int приводит к выполнению 16 одновременных операций AND.

Пример кода

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

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

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

PORTD = PORTD & B00000011; // Очищает биты 2 - 7, оставляет пины PD0 и PD1 без изменения (xx & 11 == xx)