^ (Побитовый XOR (исключающее ИЛИ))

В C++ есть несколько необычный оператор, называемый побитовым исключающим ИЛИ, также известный как побитовый XOR.  Побитовый оператор XOR пишется с использованием символа каретки ^. Побитовая операция XOR выдает 1, только если входные биты отличаются, иначе она выдает 0.

0 0 1 1   операнд1
0 1 0 1   операнд2
-------
0 1 1 0   (операнд1 ^ операнд2) - возвращаемый результат

Пример кода

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, etc.),
// он не скомпилируется для других архитектур.
void setup() {
	DDRB = DDRB | B00100000; 
	// Установить PB5 как OUTPUT
	//(пин 13 на Uno/Nano, пин 9 на Leonardo/Micro, пин 11 на Mega) 
	Serial.begin(9600);
}

void loop() {
	PORTB = PORTB ^ B00100000; 
	// Инвертировать PB5, оставить остальное в прежнем состоянии.
	delay(100);
}