может кто-нибудь объяснить, что это означает |=
? Как здесь:Смущенный синтаксисом java
noti.flags |= Notification.FLAG_AUTO_CANCEL;
может кто-нибудь объяснить, что это означает |=
? Как здесь:Смущенный синтаксисом java
noti.flags |= Notification.FLAG_AUTO_CANCEL;
Это краткое представление заявления:
noti.flags = noti.flags | Notification.FLAG_AUTO_CANCEL;
Это побитовое ИЛИ оператор используется в качестве присвоения
noti.flags |= Notification.FLAG_AUTO_CANCEL;
такой же как
noti.flags = noti.flags | Notification.FLAG_AUTO_CANCEL
Это назначение 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
, и все они находятся в разных местах.
Простое объяснение того, что делает это выражение вы вывесили (наверное):
Каждый интегральный тип представлен в виде списка битов. Так 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
.