& (побитовое И)
Описание
Оператор побитового И (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)