&= (составное побитовое И)
Описание
Составной побитовый оператор И
&=
часто используется с переменной и константой, чтобы принудительно установить определённые биты переменной в состояние LOW (в 0). В руководствах по программированию это часто называют «очисткой» или «сбросом» битов.
Краткое напоминание о побитовом
&
И:
0 0 1 1 operand1
0 1 0 1 operand2
----------
0 0 0 1 (operand1 & operand2) - возвращаемый результат
Синтаксис
x &= y; // эквивалентно x = x & y;
Параметры
x: переменная. Допустимые типы данных:char,int,long.y: переменная или константа. Допустимые типы данных:char,int,long.
Пример кода
Биты, которые «побитово И-енны» с 0, сбрасываются в 0, поэтому, если myByte — переменная типа byte:
myByte & 0b00000000 = 0;
Биты, которые «побитово И-енны» с 1, не изменяются, поэтому:
myByte & 0b11111111 = myByte;
Примечания и предупреждения
Поскольку мы имеем дело с битами в побитовом операторе, удобно использовать двоичный формат с константами. Числа всё равно имеют те же значения в других представлениях, просто их не так легко понять. Кроме того, 0b00000000 показано для ясности, но ноль в любом числовом формате — это ноль (хм, есть в этом что-то философское?).
Следовательно, чтобы очистить (установить в ноль) биты 0 и 1 переменной, оставив остальные биты переменной без изменений, используйте составной побитовый оператор И (&=) с константой 0b11111100.
1 0 1 0 1 0 1 0 переменная
1 1 1 1 1 1 0 0 маска
----------------------
1 0 1 0 1 0 0 0
биты без изменений
биты очищены
Вот то же представление, где биты переменной заменены символом x.
x x x x x x x x переменная
1 1 1 1 1 1 0 0 маска
----------------------
x x x x x x 0 0
биты без изменений
биты очищены
Поэтому если:
myByte = 0b10101010;
myByte &= 0b11111100; // получится 0b10101000