Побитовый оператор 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)