Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Что означает | = в Java / Android? (присваивание поразрядным ИЛИ)

Автор вопроса: mrdОтветов: 2

Возможный дубликат:
Ярлык или назначение (| = ) оператор в Java

Я нашел следующий пример кода в документации Android SDK:

    boolean retValue = false;
    retValue |= mActionBarHelper.onCreateOptionsMenu(menu);
    retValue |= super.onCreateOptionsMenu(menu);

Может ли кто-нибудь показать мне эквивалентный код, чтобы продемонстрировать, что он делает?

Примечание: я предполагаю, что вызовы методов возвращают логическое значение, поэтому мне нравится видеть пример того, как это выглядит как конструкция if-else.

  • @GregKopff: Это побитовое ИЛИ, а не логическое ИЛИ. Makoto 11.05.2012
  • @Makoto: Я не думал, что существует определенное битовое представление логического типа данных. Greg Kopff 11.05.2012
  • @GregKopff: Побитовое ИЛИ означает, что вы берете два набора битов и сохраняете высокий уровень битов тогда и только тогда, когда бит в том же месте установлен высоким. Пример: 1001 | 0110 = 1111. Дополнительную информацию см. В Википедии. Makoto 11.05.2012
  • @Makoto: Хорошо понятно - и для байтов, символов, шорт, целых и длинных чисел, которые имеют определенное битовое представление, это имеет смысл. Конечно, логическое значение можно рассматривать как 1 бит (язык использует байт для его хранения), но у него нет битового представления, как у других типов данных. Вы не можете преобразовать логическое значение в байт и получить 0x00 / 0x01. Да, поразрядную операцию достаточно легко осмыслить на одном бите, но по причинам, указанным выше, я удивлен этим. Greg Kopff 11.05.2012

androidjavabitwise-operators

Ответы

Ответ 1 · рейтинг 2 · Mattias Isegran Bergander

Сокращение для or с собой и назначить мне, хотя это не короткое замыкание or вместо логического or. Поскольку он доступен как краткая версия присваивания and or: ing, иногда используется в любом случае с логическими значениями, поскольку нет || =. Но важное замечание: в этом случае он будет вызывать оба метода, даже если retValue уже может быть true

Таким образом, эквивалентных (логических) утверждений может быть несколько, но некоторые из них будут:

boolean a = mActionBarHelper.onCreateOptionsMenu(menu);
boolean b = super.onCreateOptionsMenu(menu);
boolean retValue =  a || b;

or

boolean retValue = mActionBarHelper.onCreateOptionsMenu(menu);
retValue = super.onCreateOptionsMenu(menu) || retValue;

Ответ 2 · рейтинг 8 · Marko Topolnik

| к логическому значению применяется просто логическое ИЛИ.

boolean retValue = false;
retValue = retValue | mActionBarHelper.onCreateOptionsMenu(menu);
retValue = retValue | super.onCreateOptionsMenu(menu);

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы