2010-02-24 3 views
14

При чтении Android guide to Notifications, я наткнулся на это:Что делает оператор | = в Java?

Добавление вибрацию

Вы можете предупредить пользователя с шаблоном вибрации по умолчанию или с шаблоном вибрации, определенной приложением.

Чтобы использовать шаблон по умолчанию, добавьте «DEFAULT_VIBRATE» в поле значений по умолчанию:

notification.defaults |= Notification.DEFAULT_VIBRATE; 

Что это делает ясно: он добавляет DEFAULT_VIBRATE флаг флаги по умолчанию объекта уведомления. Но что делает оператор |= в Java? Похоже на «ИЛИ», но как это работает?

Можете ли вы привести пример, используя цифры?

Благодаря

ответ

27

|= является оператором побитовое ИЛИ-присваивания. Он принимает текущее значение 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 
+0

большое спасибо, это ясно и просто – dgraziotin

17

a |= x является a = a | x и | является "поразрядное ИЛИ"

Всякий раз, когда возникают такие вопросы, проверить the official tutorial on operators.

Каждый оператор имеет форму присваивания:

+=-=*=/=%=&=^=|=<<=>>=>>>=

Где a OP= x переводится на a = a OP x

И о bitwise operations:

0101 (decimal 5) 
OR 0011 (decimal 3) 
= 0111 (decimal 7) 

Побитовое ИЛИ может быть использовано в тех случаях, когда набор бит, используемых в качестве флагов; биты в одной двоичной цифре могут представлять собой отдельную логическую переменную. Применение побитовой операции ИЛИ к цифре вместе с битовой парой, содержащей 1 в некоторых позициях, приведет к новой цифре с установленными битами. Например:

+0

Вот что я сделал, но я не мог найти | = форму, которая выглядит странно для меня – dgraziotin

+1

@bodom_lx ну, там прямо на странице, которую я связал. – Bozho

+0

Это не так .. Существует побитовое включение или оператор «|», который я знаю. То, что я не знал, было формой «| =». Я видел это сегодня впервые в жизни, и это не выглядело очевидным для меня и моих товарищей по информатике – dgraziotin

1

Это бит мудрый оператор ИЛИ. Если notifications.default - 0b00000001 в двоичной форме и Notification.DEFAULT_VIBRATE - 0b11000000, тогда результат будет 0b11000001.

3

Это короткое обозначение руки для выполнения побитового ИЛИ и назначение за один шаг.

x |= y эквивалентно x = x | y

Это может быть сделано со многими операторами, например:

x += y 
x -= y 
x /= y 
x *= y 
etc. 

Пример побитовым ИЛИ с использованием чисел ..если бит установлен в операндах, бит будет установлен в результате. Так, если:

x = 0001 and 
y = 1100 then 
-------- 
r = 1101 
1

В этом случае notification.defaults является bit array. Используя |=, вы добавляете Notification.DEFAULT_VIBRATE в набор параметров по умолчанию. Внутри Notification, вполне вероятно, что присутствие этого конкретного значения будет проверен на наличие примерно так:

notification.defaults & Notification.DEFAULT_VIBRATE != 0 // Present 
0

побитовое ИЛИ оператора

+0

это не _only_ побитовое ИЛИ – Bozho

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