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