Что делает оператор | = в Java?
Прочитав руководство для Android для уведомлений, я наткнулся на это:
Добавление вибрации
Вы можете предупредить пользователя с шаблоном вибрации по умолчанию или с помощью вибрационный шаблон, определенный вашим приложением.
Чтобы использовать шаблон по умолчанию, добавьте "DEFAULT_VIBRATE" в поле по умолчанию:
notification.defaults |= Notification.DEFAULT_VIBRATE;
Это ясно: он добавляет флаг DEFAULT_VIBRATE
к флагам по умолчанию объекта уведомления.
Но что делает оператор |=
в Java?
Это похоже на "OR", но как это работает?
Можете ли вы привести пример с помощью чисел?
Спасибо
Ответы
Ответ 1
|=
является оператором присваивания побитовым ИЛИ. Он принимает текущее значение LHS, побитовое или RHS, и присваивает значение обратно LHS (аналогично +=
делает с добавлением).
Например:
foo = 32; // 32 = 0b00100000
bar = 9; // 9 = 0b00001001
baz = 10; // 10 = 0b00001010
foo |= bar; // 32 | 9 = 0b00101001 = 41
// now foo = 41
foo |= baz; // 41 | 10 = 0b00101011 = 43
// now foo = 43
Ответ 2
a |= x
является a = a | x
, а |
является "побитовым включением ИЛИ"
Всякий раз, когда возникают такие вопросы, проверьте официальное руководство по операторам.
Каждый оператор имеет форму назначения:
+=
-=
*=
/=
%=
&=
^=
|=
<<=
>>=
>>>=
Где a OP= x
переводится на a = a OP x
И о побитовые операции:
0101 (decimal 5)
OR 0011 (decimal 3)
= 0111 (decimal 7)
Побитовое ИЛИ может использоваться в ситуациях, когда набор бит используется как флаги; биты в одной двоичной цифре могут представлять собой отдельную логическую переменную. Применение побитовой операции ИЛИ к цифре вместе с битовой парой, содержащей 1 в некоторых позициях, приведет к новой цифре с установленными битами. Например:
Ответ 3
Это короткое обозначение руки для выполнения побитового OR и назначения за один шаг.
x |= y
эквивалентно x = x | y
Это можно сделать со многими операторами, например:
x += y
x -= y
x /= y
x *= y
etc.
Пример побитового ИЛИ с использованием чисел. Если в операндах установлен бит, бит будет установлен в результате. Итак, если:
x = 0001 and
y = 1100 then
--------
r = 1101
Ответ 4
Это бит-бит оператора OR. Если notifications.default - 0b00000001 в двоичной форме и Notification.DEFAULT_VIBRATE - 0b11000000, тогда результат будет 0b11000001.
Ответ 5
В этом случае notification.defaults
представляет собой массив бит . Используя |=
, вы добавляете Notification.DEFAULT_VIBRATE
в набор параметров по умолчанию. Внутри Notification
, вероятно, что присутствие этого значения будет проверяться так:
notification.defaults & Notification.DEFAULT_VIBRATE != 0 // Present
Ответ 6
побитовый оператор OR