| (bitwise OR)
Оператор | сравнивает два числа побитово и устанавливает бит результата в 1, если хотя бы один из соответствующих битов операндов равен 1.
Полная статья
Описание
Побитовый оператор OR обозначается символом | (вертикальная черта). Он сравнивает два целочисленных значения побитово: каждый бит результата определяется независимо от остальных — только на основе соответствующих битов двух операндов.
Правило простое: результирующий бит равен 1, если хотя бы один из двух входных битов равен 1. И только если оба бита равны 0, результат тоже будет 0.
Таблица истинности:
0 0 1 1 operand1
0 1 0 1 operand2
----------
0 1 1 1 (operand1 | operand2) - returned result
Пример кода
int a = 92; // в двоичном виде: 0000000001011100
int b = 101; // в двоичном виде: 0000000001100101
int c = a | b; // результат: 0000000001111101, или 125 в десятичном виде.
Где применяется
Самое частое применение побитового OR — установка отдельных битов в числе, не затрагивая остальные. Это особенно полезно при работе с регистрами микроконтроллера, флагами конфигурации и протоколами, где каждый бит несёт самостоятельный смысл.
Например, чтобы включить несколько функций одновременно, их флаги объединяют через |:
// Примечание: этот код специфичен для архитектуры AVR
// устанавливаем биты направления для пинов 2–7, не трогая PD0 и PD1 (xx | 00 == xx)
// аналог pinMode(pin, OUTPUT) для пинов 2–7 на Uno или Nano
DDRD = DDRD | 0b11111100;
Практические замечания
- OR только устанавливает биты, но не сбрасывает. Если нужно сбросить бит, используйте побитовый AND (
&) с инвертированной маской. - Не путайте
|и||. Одиночный|— побитовый оператор, работающий с каждым битом числа. Двойной||— логический оператор, который возвращаетtrueилиfalseи используется в условиях. - Результат зависит от типа операндов. Если один из операндов —
int, а другой —byte, C++ приведётbyteкintперед вычислением. Следите за типами, чтобы не получить неожиданный результат при присвоении обратно вbyte. - Порядок бит имеет значение. Убедитесь, что маска составлена правильно: бит 0 — это самый младший бит (значение
1), бит 7 — старший бит байта (значение128). - Удобно для компактного хранения флагов. Вместо восьми отдельных
bool-переменных можно использовать одинbyte, где каждый бит — отдельный флаг, и управлять ими через|,&и^.