Что такое оператор равенства канала (=)?
Разработчики, которые сталкивались с оператором равенства канала (|=) в открытом исходном коде библиотечный код может задаться вопросом о его значении. Этот оператор, который часто ошибочно принимают за логическое присваивание, выполняет важную побитовую операцию ИЛИ.
Понимание побитового ИЛИ
Оператор равенства канала |= работает идентично оператору =. В приведенном ниже коде оператор |= объединяет исходное значение значений по умолчанию с константой DEFAULT_SOUND:
notification.defaults |= Notification.DEFAULT_SOUND;
Эта операция эквивалентна:
notification.defaults = notification.defaults | Notification.DEFAULT_SOUND;
где | обозначает побитовый оператор ИЛИ.
Побитовое ИЛИ в масках констант
В приведенном примере константы DEFAULT_SOUND, DEFAULT_VIBRATE и DEFAULT_LIGHTS представляют собой степени двойки:
DEFAULT_SOUND = 1 DEFAULT_VIBRATE = 2 (1Это позволяет использовать побитовое ИЛИ для добавления или удаления флагов. Например:
int myFlags = DEFAULT_SOUND | DEFAULT_VIBRATE; // 001 | 010 = 011Добавление еще одного флага:
myFlags |= DEFAULT_LIGHTS;просто добавляет новый флаг.
Проверка наличия флага
Побитовый оператор И (&) проверяет наличие флага:
boolean hasVibrate = (DEFAULT_VIBRATE & myFlags) != 0;Если результат ненулевое значение, флаг установлен.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3