- Библиотеки
- Операторы
- Sketch
- Управляющие операторы
- Синтаксис
- Арифметические операторы
- Операторы сравнения
- Логические операторы
- Указатели доступа
- Битовые операторы
- Составные операторы
- |= (составное побитовое ИЛИ)
- Данные
- Типы данных
- Преобразование типов данных
- Область видимости переменных и квалификаторы
- Утилиты
- Функции
- Цифровой ввод/вывод
- Аналоговый вход/выход
- Расширенный ввод/вывод
- Время
- Математические функции
- Тригонометрические функции
- Символы
- Случайные числа
- Биты и байты
- Внешние Прерывания
- Прерывания
- Функции передачи данных
- Функции
|= (составное побитовое ИЛИ)
Описание
Составной побитовый оператор AND &= часто используется с переменной и константой для принудительного перевода определенных битов в переменной в состояние LOW (в 0). В руководствах по программированию это часто называют «очисткой» или «сбросом» бит.
Составной побитовый оператор ИЛИ |= часто используется с переменной и константой для установки в 1 определенных битов в переменной.
Обзор побитового оператора ИЛИ |:
0 0 1 1 операнд1
0 1 0 1 операнд2
-------
0 0 1 1 (операнд1 & операнд2) - возвращаемый результат
Синтаксис
x |= y; // эквивалент записи x = x | y;
Параметры
x: переменная типа char, int или long
y: целочисленная константа либо переменная типа char, int или long
Пример
Если во втором операнде будут «0», то все исходные биты останутся без изменений.
myByte | B00000000 = myByte;
если во втором операнде будут одни «1», то и все исходные биты тоже поменяются на «1»
myByte | B11111111 = B11111111;
Примечание
Поскольку мы имеем дело с битами в побитовом операторе - удобно использовать двоичное представление константа. Числа по-прежнему имеют одинаковое значение в других представлениях, их просто не так просто понять. Кроме того, B00000000 показан для ясности, но ноль в любом числовом формате равен нулю.
Следовательно - чтобы установить биты 0 и 1 переменной, оставив остальную часть переменной без изменений, используйте составной битовый оператор ИЛИ (|=) с константой B00000011
1 0 1 0 1 0 1 0 переменная
0 0 0 0 0 0 1 1 маска
---------------
1 0 1 0 1 0 1 1 первые 6 бит остались нетронутыми, 2 последних - были установлены в 1
Теперь то же самый пример с битами переменной, замененными символом x
x x x x x x x x переменная
0 0 0 0 0 0 1 1 маска
---------------
x x x x x x 1 1 первые 6 бит остались нетронутыми, 2 последних — были установлены в 1
Так что если:
myByte = B10101010;
myByte |= B00000011 == B10101011;