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

Описание

В C++ существует несколько необычный оператор, называемый побитовым ИСКЛЮЧАЮЩИМ ИЛИ, также известный как побитовый XOR. (В английском языке это обычно произносится «экс-ор».) Оператор побитового XOR записывается с помощью символа каретки ^. Побитовая операция XOR возвращает 1 только в том случае, если входные биты различаются, иначе результат равен 0.

Точнее:

0  0  1  1    operand1
0  1  0  1    operand2
----------
0  1  1  0    (operand1 ^ operand2) - возвращаемый результат

Пример кода

int x = 12;     // двоичное: 1100
int y = 10;     // двоичное: 1010
int z = x ^ y;  // двоичное: 0110, или десятичное 6

Оператор ^ часто используется для переключения (т.е. изменения с 0 на 1 или с 1 на 0) некоторых битов в целочисленном выражении. В операции побитового XOR, если в маске бит равен 1, этот бит инвертируется; если равен 0, бит не изменяется и остаётся прежним.

// Примечание: Этот код использует регистры, специфичные для микроконтроллеров AVR (Uno, Nano, Leonardo, Mega и т.д.)
// он не скомпилируется для других архитектур
void setup() {
  DDRB = DDRB | 0b00100000;  // устанавливает PB5 (пин 13 на Uno/Nano, пин 9 на Leonardo/Micro, пин 11 на Mega) как OUTPUT
  Serial.begin(9600);
}

void loop() {
  PORTB = PORTB ^ 0b00100000;  // инвертирует PB5, оставляя остальные без изменений
  delay(100);
}

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