Страницы

Поиск по вопросам

вторник, 9 октября 2018 г.

Оператор | (ИЛИ) при передаче флагов в метод

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
Вот кусок кода. Метод setFlags на вход получает int, но никак не boolean. Что значить оператор ИЛИ между двумя константами при передаче в метод?


Ответ

| - это побитовое ИЛИ над целочисленными операндами и логическое ИЛИ над булевыми операциями. || - это логическое ИЛИ над булевыми операндами (при этом правый операнд будет вычислен, только если левый вычислялся как false).
Побитовое ИЛИ часто используют при работе с флагами, упакованными в целочисленное значение. Каждому флагу соответствует число вида 2^n. В двоичном представлении это будет одна единица с n нолей слева:
0x01 == 0b00000001 0x02 == 0b00000010 0x04 == 0b00000100 0x08 == 0b00001000 ... 0x80 == 0b10000000
Для получения битовой маски, соответствующей объединению (включению) нескольких флагов, их складывают при помощи побитового ИЛИ.
0b00000001 | 0b00001000 == 0b00001001
Для проверки, включен ли конкретный флаг, используют побитовое И. Если результат ненулевой - флаг включен:
((0b00001001 & 0b00001000) != 0) // true, флаг включен ((0b00001001 & 0b01000000) != 0) // false, флаг выключен

Комментариев нет:

Отправить комментарий