Присваивание с побитовым умножением "&="

Составной побитовый оператор И &= часто используется с переменной и константой для принудительного перевода определенных битов в переменной в состояние LOW (в 0). В руководствах по программированию это часто называют «очисткой» или «сбросом» битов.

Обзор побитового оператора И :

0 0 1 1   операнд1
0 1 0 1   операнд2
--------
0 0 0 1   (операнд1 и операнд2) - возвращаемый результат

Синтаксис

x &= y; // Эквивалентно x = x & y;

Параметры

x: переменная Допустимые типы данных: char, int, long
y: переменная или постоянная. Разрешенные типы данных: char, int, long

Пример кода

Биты, которые «поразрядно ANDed» с 0 очищаются до 0, поэтому, если myByte является байтовой переменной,

myByte & B00000000 = 0;

Биты, которые "поразрядны с AND" с 1, остаются неизменными,

myByte & B11111111 = myByte;

Примечания и предупреждения

Поскольку мы имеем дело с битами в побитовом операторе - удобно использовать двоичный форматер с константами. Числа по-прежнему имеют одинаковое значение в других представлениях, их просто не так просто понять. Кроме того, B00000000 показан для ясности, но ноль в любом числовом формате равен нулю.

Следовательно, чтобы очистить (установить в ноль) биты 0 и 1 переменной, оставив остальную часть переменной без изменений, используйте составной битовый оператор AND (&=) с константой B11111100

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 маска
---------------
х х х х х х 0 0

      |      |
      |      |___ 
биты очищены
      |__________ биты без изменений

 

Пример кода:

myByte = B10101010;
myByte &= B11111100; // Результат в B10101000