Arduino:Справочник языка Arduino/Унарные операторы/&= (побитовый оператор AND, совмещенный с присваиванием): различия между версиями
Myagkij (обсуждение | вклад) Нет описания правки |
Myagkij (обсуждение | вклад) |
||
Строка 71: | Строка 71: | ||
=См.также= | =См.также= | ||
{{ads}} | |||
# [[Arduino:Справочник языка Arduino/Унарные операторы/Побитовый оператор OR, совмещенный с присваиванием||= (побитовый оператор OR, совмещенный с присваиванием)]] | # [[Arduino:Справочник языка Arduino/Унарные операторы/Побитовый оператор OR, совмещенный с присваиванием||= (побитовый оператор OR, совмещенный с присваиванием)]] | ||
# [[Arduino:Справочник языка Arduino/Побитовые операторы/AND(&),OR и XOR (^)|Побитовый оператор AND (&)]] | # [[Arduino:Справочник языка Arduino/Побитовые операторы/AND(&),OR и XOR (^)|Побитовый оператор AND (&)]] |
Версия от 23:32, 17 марта 2020
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Побитовый оператор AND, совмещенный с присваиванием[1]
Побитовый AND, совмещенный с присваиванием (обозначается как «&=»), как правило, требует переменной и константы. Он переключает некоторые биты в состояние LOW (т.е. на «0»). В руководствах по программированию эти биты часто называют «очищающими» или «сбрасывающими».
Синтаксис
x &= y; // это то же самое, то и x = x & y
Параметры
x — переменная в виде символа, целого или длинного целого
y — константа в виде целого или символ, целое или длинное целое
Пример
Во-первых, вспомним, как работает побитовый AND:
0 0 1 1 operand1
0 1 0 1 operand2
----------
0 0 0 1 (operand1 & operand2) – возвращенный результат
Таким образом, у пар, где есть как минимум один «0», в итоге тоже получается «0», поэтому...
myByte & B00000000 = 0;
…а у пар, где оба бита — «1», итоговым битом тоже будет «1», то есть...
myByte & B11111111 = ByByte;
Примечание: Поскольку мы работаем с битами, для пущего удобства константы лучше переделать в бинарный вид. Да, эти числа не так понятны, как числа в десятеричном выражении, но они все те же, просто по-другому представлены. И константа B00000000 указана тут для наглядности... ноль — это всегда ноль, в каком бы формате они ни был (хм, что-то меня потянуло на философию...).
Следовательно, оператор «&=» (используемый вместе с константой воде B11111100) нужен как раз для того, чтобы «очистить» некоторые биты, а другие оставить нетронутыми.
1 0 1 0 1 0 1 0 переменная
1 1 1 1 1 1 0 0 маска
----------------------
1 0 1 0 1 0 0 0 первые 6 бит остались нетронутыми, 2 последних - были очищены
Теперь похожий пример, но биты переменной заменены на «иксы»:
x x x x x x x x переменная
1 1 1 1 1 1 0 0 маска
----------------------
x x x x x x 0 0 первые 6 бит остались нетронутыми, 2 последних — были очищены
Поэтому если:
myByte = B10101010;
myByte &= B11111100 == B10101000;
См.также
- |= (побитовый оператор OR, совмещенный с присваиванием)
- Побитовый оператор AND (&)
- Побитовый оператор OR