Шановні друзі! Сайт знаходиться в процесі перекладу на солов'їну мову. Все буде Україна!

Составное побитовое И (&=)

Описание

Оператор составного побитового И (&=) часто употребляется между переменной и константой чтобы перевести отдельные биты переменной в низкий уровень (0). В программировании эту операцию часто называеют "очисткой" или "сбросом" бит.

Синтаксис

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

Параметры

x: переменная типа char, int или long

y: целочисленная константа либо переменная типа char, int или long

Пример:

Для начала рассмотрим действие оператора побитового И (&)

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

При выполнении операции побитового И, биты операнда1, взаимодействующие с 0 операнда2, очищаются. Таким образом, если myByte - переменная типа byte,

myByte & B00000000 = 0;

При выполнении операции побитового И, биты операнда1, взаимодействующие с 1, остаются неизменными, поэтому:

myByte & B11111111 = myByte;

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

Следовательно, чтобы очистить (привести к 0) 0-й и 1-й биты переменной, не затронув при этом остальные, необходимо использовать оператор составного побитового И (&=) с константой 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    маска
   ----------------------    
   x  x  x  x  x  x  0  0

неизменившиеся биты
                     очищенные биты

Поэтому, если:

myByte =  10101010;

myByte &= B1111100 == B10101000;

Смотрите также