Главная chevron_right Структура chevron_right Побитовые операторы chevron_right | (bitwise OR)

| (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, где каждый бит — отдельный флаг, и управлять ими через |, & и ^.

Полезные материалы