Описание
Оператор составного побитового И (&=) часто употребляется между переменной и константой чтобы перевести отдельные биты переменной в низкий уровень (0). В программировании эту операцию часто называеют «очисткой» или «сбросом» бит.
Синтаксис
1 | x &= y; // эквивалентно x = x & y; |
Параметры
x: переменная типа char, int или long
y: целочисленная константа либо переменная типа char, int или long
Пример:
Для начала рассмотрим действие оператора побитового И (&)
1 2 3 4 | 0 0 1 1 операнд1 0 1 0 1 операнд2 ---------- 0 0 0 1 (операнд1 & операнд2) - возвращаемый результат |
При выполнении операции побитового И, биты операнда1, взаимодействующие с 0 операнда2, очищаются. Таким образом, если myByte — переменная типа byte,
1 | myByte & B00000000 = 0; |
При выполнении операции побитового И, биты операнда1, взаимодействующие с 1, остаются неизменными, поэтому:
1 | myByte & B11111111 = myByte; |
Примечание: поскольку в побитовых операторах мы имеем дело с битами — удобнее использовать двоичное представление констант. В других системах счисления они являются точно такими же числами, но не так просты для понимания. Число B0000000 показано для ясности, хотя ноль в любой системе счисления является нулем (хммм, здесь есть что-то философское, не правда ли?)
Следовательно, чтобы очистить (привести к 0) 0-й и 1-й биты переменной, не затронув при этом остальные, необходимо использовать оператор составного побитового И (&=) с константой B11111100:
1 2 3 4 5 6 7 | 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, то та же операция будет выглядеть так:
1 2 3 4 5 6 7 | x x x x x x x x переменная 1 1 1 1 1 1 0 0 маска ---------------------- x x x x x x 0 0 неизменившиеся биты очищенные биты |
Поэтому, если:
1 2 3 | myByte = 10101010; myByte &= B1111100 == B10101000; |