Составной побитовый оператор ИЛИ |= часто используется с переменной и константой для «установки» (установки в 1) определенных битов в переменной.
Обзор побитового оператора ИЛИ:
0 0 1 1 операнд1
0 1 0 1 операнд2
-------
0 1 1 1 (операнд1 | операнд2) - возвращаемый результат
x |= y; // Эквивалентно x = x | y;
x: переменная. Допустимые типы данных: char, int, long
y: переменная или постоянная. Разрешенные типы данных: char, int, long
Биты, к которым применяется операция побитовое ИЛИ с 0 - не изменяются, поэтому, если myByte является байтовой переменной,
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
| |
| |___ биты установлены
|__________ биты без изменений
Здесь то же самое представление с битами переменных, замененными символом x.
x x x x x x x x переменная
0 0 0 0 0 0 1 1 маска
---------------
х х х х х х 1 1
| |
| |___ биты установлены
|__________ биты без изменений
Так что если:
myByte = B10101010; myByte |= B00000011 == B10101011;