Описание
Составной побитовый оператор XOR ^= часто используется с переменной и константой для переключения (инвертирования) определенных битов в переменной.
Обзор побитового оператора XOR ^:
0 0 1 1 operand1
0 1 0 1 operand2
-------
0 1 1 0 (operand1 ^ operand2) - возвращенный результат
Синтаксис
x ^= y; // эквивалентно выражению x = x ^ y;
Параметры
x: переменная. Допустимые типы данных: int, long.
y: переменная или константа. Допустимые типы данных: int, long.
Примеры
myByte ^ B00000000 = myByte;
myByte ^ B11111111 = ~myByte;
Примечание
Поскольку мы имеем дело с битами в побитовом операторе - удобно использовать двоичный формат с константами. Числа по-прежнему имеют одинаковое значение в других представлениях, их просто не так просто понять. Кроме того, B00000000 показан для ясности, но ноль в любом числовом формате равен нулю.
Следовательно, чтобы переключать биты 0 и 1 переменной, оставляя остальную часть переменной без изменений, используйте составной битовый оператор XOR (^=) с константой B00000011
1 0 1 0 1 0 1 0 переменная
0 0 0 0 0 0 1 1 маска
---------------
1 0 1 0 1 0 0 1 первые 6 без изменений. последние 2 - инвертированы
Здесь то же самое представление с битами переменных, замененными символом 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 первые 6 без изменений. последние 2 - инвертированы
Так что
myByte = B10101010;
myByte ^= B00000011 == B10101001;