^ (побитовое исключающее ИЛИ)
Описание
В 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);
}