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

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Нет описания правки
Нет описания правки
 
Строка 9: Строка 9:
==Синтаксис==
==Синтаксис==


<syntaxhighlight lang="c" enclose="div">
<syntaxhighlight lang="c">
x |= y; // это то же самое, что и x = x | y
x |= y; // это то же самое, что и x = x | y
</syntaxhighlight>
</syntaxhighlight>
Строка 15: Строка 15:
==Параметры==
==Параметры==


<syntaxhighlight lang="c" enclose="div">
<syntaxhighlight lang="c">
x — переменная в виде символа, целого или длинного целого
x — переменная в виде символа, целого или длинного целого
y — константа в виде целого или символ, целое или длинное целое
y — константа в виде целого или символ, целое или длинное целое
Строка 24: Строка 24:
Для начала вспомним, как работает '''побитовый OR''':
Для начала вспомним, как работает '''побитовый OR''':


<syntaxhighlight lang="c" enclose="div">
<syntaxhighlight lang="c">
0  0  1  1    operand1
0  0  1  1    operand1
0  1  0  1    operand2
0  1  0  1    operand2
Строка 33: Строка 33:
То есть, если во втором операнде будут '''«0»''', то все исходные биты останутся без изменений. Например...
То есть, если во втором операнде будут '''«0»''', то все исходные биты останутся без изменений. Например...


<syntaxhighlight lang="c" enclose="div">
<syntaxhighlight lang="c">
myByte | B00000000 = myByte;
myByte | B00000000 = myByte;
</syntaxhighlight>
</syntaxhighlight>
Строка 39: Строка 39:
С другой стороны, если во втором операнде будут одни '''«1»''', то и все исходные биты тоже поменяются на '''«1»'''. Вот так...
С другой стороны, если во втором операнде будут одни '''«1»''', то и все исходные биты тоже поменяются на '''«1»'''. Вот так...


<syntaxhighlight lang="c" enclose="div">
<syntaxhighlight lang="c">
myByte | B11111111 = B11111111;
myByte | B11111111 = B11111111;
</syntaxhighlight>
</syntaxhighlight>
Строка 45: Строка 45:
Следовательно, чтобы поменять не все, а лишь выборочные биты, мы как раз воспользуемся побитовым оператором '''OR''', совмещенным с присваиванием, и применим его вместе с константой '''B00000011''':
Следовательно, чтобы поменять не все, а лишь выборочные биты, мы как раз воспользуемся побитовым оператором '''OR''', совмещенным с присваиванием, и применим его вместе с константой '''B00000011''':


<syntaxhighlight lang="c" enclose="div">
<syntaxhighlight lang="c">
1  0  1  0  1  0  1  0    переменная
1  0  1  0  1  0  1  0    переменная
0  0  0  0  0  0  1  1    маска
0  0  0  0  0  0  1  1    маска
Строка 54: Строка 54:
А вот тот же пример, но значения переменной заменены на '''«иксы»''':
А вот тот же пример, но значения переменной заменены на '''«иксы»''':


<syntaxhighlight lang="c" enclose="div">
<syntaxhighlight lang="c">
x  x  x  x  x  x  x  x    переменная
x  x  x  x  x  x  x  x    переменная
0  0  0  0  0  0  1  1    маска
0  0  0  0  0  0  1  1    маска
Строка 63: Строка 63:
Таким образом...
Таким образом...


<syntaxhighlight lang="c" enclose="div">
<syntaxhighlight lang="c">
myByte =  B10101010;
myByte =  B10101010;
myByte |= B00000011 == B10101011;
myByte |= B00000011 == B10101011;

Текущая версия от 12:40, 20 мая 2023

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


Побитовый оператор 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

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