В 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); }