Страницы

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

понедельник, 2 декабря 2019 г.

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

#java #android


intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);


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


Ответы

Ответ 1



| - это побитовое ИЛИ над целочисленными операндами и логическое ИЛИ над булевыми операциями. || - это логическое ИЛИ над булевыми операндами (при этом правый операнд будет вычислен, только если левый вычислялся как 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, флаг выключен

Ответ 2



В данном случае используется "побитовое или". Как следует из название оно используется как обычное или только для битов числа. В данном случае оно используется для того чтобы установить одновременно оба флага.

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

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