Как Java обрабатывает аргументы, разделенные |?
например,
private void foo(int i) {
System.out.println(i);
}
private void bar() {
foo(1 | 2 | 1);
}
Который дал бы вывод
3
Я видел используемый в конструкторах виджета SWT/JFace. То, что я не могу выяснить, то, как значение i
решен.
|
- это побитовый оператор ИЛИ.
foo(1 | 2 | 1);
означает вызов foo с аргументом 1 побитовый или 2 побитовый или 1 .
1
в двоичном формате - 01
2
в двоичном виде - 10
Побитовое или из 01
и 10
11
, что равно 3 в десятичной системе счисления.
Обратите внимание, что оператор |
может также использоваться для логических значений. Отличие от оператора ||
в том, что второй операнд вычисляется, даже если первый операнд имеет значение истина
.
Фактически, все побитовые операторы также работают с логическими значениями, включая xor ^
. Однако здесь нет соответствующего логического оператора. (Это было бы излишним, поскольку нет возможности выполнить "ленивую" оценку ^
:)
он использует оператор побитового ИЛИ. Для начала, 1 | 1 = 1
, поэтому вторая 1 является лишней. Если мы удалим лишнюю 1, то получим уравнение 1 | 2 = 3
. В двухбитовом двоичном формате это выглядит так:
01 | 10 = 11
Оператор or сопоставит соответствующие биты каждого из значений, и если в одном или обоих значениях для данной позиции есть 1, то результатом будет 1. Если в обоих значениях оба соответствующих бита, то результатом будет 0.
.