2013-08-01 2 views

ответ

4

Это краткое представление заявления:

noti.flags = noti.flags | Notification.FLAG_AUTO_CANCEL; 
2

Это побитовое ИЛИ оператор используется в качестве присвоения

noti.flags |= Notification.FLAG_AUTO_CANCEL; 

такой же как

noti.flags = noti.flags | Notification.FLAG_AUTO_CANCEL 
2

Это назначение ver Sion оператора Bitwise Or, то есть:

noti.flags = noti.flags | Notification.FLAG_AUTO_CANCEL; 

bitwise or делает инклюзивного побитовое ИЛИ операции:

10110 bitwise or 
01100 
----------------- 
11110 

из исходного кода:

Bit для поразрядно-Ored в флаги, которые должны быть установлены, если уведомление должно быть отменено, когда пользователь щелкнет.

public static final int FLAG_AUTO_CANCEL = 0x00000010; 

Это hexadecimal для числа 16. Если вы задаетесь вопросом, почему мы используем эти типы флагов, это потому, что другие флаги будут иметь представления:

0x00000020 
0x00000040 
0x00000080 

Каждый раз, мы идем вверх степени 2. Преобразование это двоичный, получим:

00010000 
00100000 
01000000 
10000000 

Таким образом, мы можем использовать bitwise or для д etermine, который из флагов присутствует, поскольку каждый флаг содержит только один номер 1, и все они находятся в разных местах.

1

Простое объяснение того, что делает это выражение вы вывесили (наверное):

Каждый интегральный тип представлен в виде списка битов. Так noti.flags имеет представление чего-то вроде 00101. Переменная noti.flags представляется представлением флагов, то есть вариантов класса. Это означает, что каждый бит означает что-то еще и может заставить класс вести себя по-другому, в зависимости от того, бит равен 0 или 1.

Оператор | является побитовым оператором ИЛИ. |= - это версия назначения побитового оператора OR. (Ведет себя так же, как +=)

В настоящее время Notification.FLAG_AUTO_CANCEL является постоянным для одного флага, возможно 10000. Если вы примените побитовое ИЛИ (|) до Notification.FLAG_AUTO_CANCEL и до noti.flags (00101 | 10000), результатом будет 10101. Этот результат теперь присваивается noti.flags.

Выраженное выражение в основном просто устанавливает новый флаг, называемый FLAG_AUTO_CANCEL значению флага noti.flags.

Смежные вопросы