^= (составное побитовое исключающее ИЛИ)

Описание

Составной оператор побитового 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;

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