Arduino:Справочник языка Arduino/Унарные операторы/Побитовый оператор OR, совмещенный с присваиванием

Материал из ВикиСправочника
Перейти к: навигация, поиск

{{#setlogo:ArduinoCommunityLogo.png}}

Перевод: Максим Кузьмин (Cubewriter)
Перевел 1784 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Побитовый оператор OR, совмещенный с присваиванием[1]

Этот оператор (обозначается как «|=») требует, как правило, переменной и константы, а его функция заключается в «перенастройке» некоторых битов в переменной на «1».

Синтаксис

x |= y; // это то же самое, что и x = x | y

Параметры

x — переменная в виде символа, целого или длинного целого
y — константа в виде целого или символ, целое или длинное целое

Пример

Для начала вспомним, как работает побитовый OR:

0  0  1  1    operand1
0  1  0  1    operand2
----------
0  1  1  1    (operand1 | operand2) – возвращенный результат

То есть, если во втором операнде будут «0», то все исходные биты останутся без изменений. Например...

myByte | B00000000 = myByte;

С другой стороны, если во втором операнде будут одни «1», то и все исходные биты тоже поменяются на «1». Вот так...

myByte | B11111111 = B11111111;

Следовательно, чтобы поменять не все, а лишь выборочные биты, мы как раз воспользуемся побитовым оператором OR, совмещенным с присваиванием, и применим его вместе с константой 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 последних — были изменены

А вот тот же пример, но значения переменной заменены на «иксы»:

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 последних — были изменены

Таким образом...

myByte =  B10101010;
myByte |= B00000011 == B10101011;

См.также

  1. &= (побитовый оператор AND, совмещенный с присваиванием)
  2. Побитовый оператор AND (&)
  3. Побитовый оператор OR

Внешние ссылки

  1. compound bitwise OR (|=)