- Библиотеки
- Операторы
- Sketch
- Управляющие операторы
- Синтаксис
- Арифметические операторы
- Операторы сравнения
- Логические операторы
- Указатели доступа
- Битовые операторы
- Составные операторы
- ^= (составной побитовый XOR)
- Данные
- Типы данных
- Преобразование типов данных
- Область видимости переменных и квалификаторы
- Утилиты
- Функции
- Цифровой ввод/вывод
- Аналоговый вход/выход
- Расширенный ввод/вывод
- Время
- Математические функции
- Тригонометрические функции
- Символы
- Случайные числа
- Биты и байты
- Внешние Прерывания
- Прерывания
- Функции передачи данных
- Функции
^= (составной побитовый XOR)
Описание
Составной побитовый оператор 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;