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, флаг выключен
Комментариев нет:
Отправить комментарий