BitwiseCompoundAnd

Материал из MK90.ORG wiki
Перейти к: навигация, поиск

составное побитное И (&=)

Оператор составного побитового И (&=) часто используется с переменной и константой, чтобы сбросить отдельные биты переменной (перевести в нулевое значение, сбросить, или перевести в LOW).

Синтаксис


x &= y;   // эквивалентно x = x & y; 

Параметры

x: символ, переменная типа int или long

y: целочисленная константа или переменная-символ, int или long

Примеры

Сначала несколько слов об операторе побитного И (&):

  0  0  1  1    операнд1
  0  1  0  1    операнд2
  ----------
  0  0  0  1    результат - (операнд1 & операнд2)

Операция производится позиционно, над соответствующими парами битов в операндах. Там, где в операнде2 позиционно присутствует 0, результат также будет 0. Если myByte - это переменная типа byte, то:

myByte & B00000000 = 0;

Если же в операнде2 позиционно встречается 1, то результат соответствует операнду1 (не меняется):

myByte & B11111111 = myByte;

Замечание: поскольку оператор побитовый, удобно использовать бинарный префикс для более наглядного представления констант в двоичном виде. Численное значение при остается неизменным, изменяется лишь визуальное представление, которое в данном случае упрощает восприятие. Например, B00000000 записывается только для наглядности, поскольку ноль в любом формате остается нулем (по-моему, это уже что-то из области философии :)

Получается, чтобы "очистить" (установить в нулевое значение) биты 1 и 0 в переменной, не затрагивая при этом остальные биты (2-7), можно использовать составной оператор побитового И (&=) с константой 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
  
биты не изменились
                    биты сбросились
 

Вот еще одно представление той же операции, где биты переменной заменены на символы x для наглядности:

  x  x  x  x  x  x  x  x    переменная
  1  1  1  1  1  1  0  0    маска
  ----------------------
  x  x  x  x  x  x  0  0
  
биты не изменились
                    биты сбросились

Таким образом, если:

myByte = 10101010;

то:

myByte &= B1111100 == B10101000;

Смотри также

Руководство по Wiring


Исправления, пожелания и новые статьи должны быть опубликованы через Форум.

Оригинальные тексты руководств и переводы распространяются Arduino и MK90 на условиях лицензии Creative Commons Attribution-ShareAlike 3.0 License. Примеры исходных кодов и ссылки являются общественным достоянием.