2015-12-27 2 views
1

Я просто практикую некоторые основные проблемы практики Java, и это показано ниже.Как я могу оценить побитовый оператор в этом условии?

if((b2 = false) | (21 % 5)>2) return true; 

Таким образом, b2 присваивается значение false и 1> 2, конечно, неверно, но как мы оцениваем «|» ? если он вернется?

ответ

2

b2 = false присваивает false переменной b2, а выражение имеет значение false. | на booleans означает «или» (без короткого замыкания), поэтому он оценивает оба операнда, и результат является истинным, если оба операнда истинны.

не побитовый оператор. Если вы используете | для целых чисел, это побитовый оператор. Если вы используете | на booleans, это логический оператор.

Изменить:

|| является оператором короткого замыкания. Если вы напишете (a() || b()) и a() оценивает значение true, то b() не будет оцениваться, потому что результат или должен быть правдой. Одиночный | не является короткозамкнутым, поэтому оба операнда всегда оцениваются.

+0

Вы по-прежнему считаете '|' как побитовый оператор, даже для булевых. Что это значит для логического? Логическое значение можно рассматривать как однобитовое значение (тот факт, что JVM использует несколько бит для него - это просто нерелевантная реализация, выполненная для производительности). Если он работает только на одном бите, побитовый оператор - это то же самое, что и логический оператор. –

1
(b2 = false) 

(Отредактировано после коррекции хелвуда). Это также назначение, а не просто логическая операция, поэтому будьте осторожны при возникновении побочных эффектов.

И да, для булева, "|" «или» (а не побитовое), поэтому, если первый оператор истинен, он всегда будет правдой.

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