Описание
Побитовый оператор И в 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 одновременных операций И.
Пример:
int a = 92; // в двоичном: 0000000001011100
int b = 101; // в двоичном: 0000000001100101
int c = a & b; // результат: 0000000001000100, или 68 в десятичном формате.
Каждый из 16 битов в a и b обрабатывается с использованием побитового И, и все 16 результирующих битов сохраняются в c, что приводит к значению 01000100 в двоичном формате, что составляет 68 в десятичном формате.
Одним из наиболее распространенных применений побитового И является выбор конкретного бита (или битов) из целочисленного значения, часто называемого маской. Ниже приведен пример (специфичный для архитектуры AVR).
PORTD = PORTD & B00000011; // очистить биты 2-7, оставить биты 0 и 1 нетронутыми
// (xx & 11 == xx)