Как Java обрабатывает аргументы, разделенные |?

Как Java обрабатывает аргументы, разделенные |?

например,

private void foo(int i) {
    System.out.println(i);
}

private void bar() {
    foo(1 | 2 | 1);
}

Который дал бы вывод

3

Я видел используемый в конструкторах виджета SWT/JFace. То, что я не могу выяснить, то, как значение i решен.

6
задан Ozsie 8 July 2010 в 10:43
поделиться

2 ответа

| - это побитовый оператор ИЛИ.

foo(1 | 2 | 1);

означает вызов foo с аргументом 1 побитовый или 2 побитовый или 1 .

  • 1 в двоичном формате - 01
  • 2 в двоичном виде - 10

Побитовое или из 01 и 10 11 , что равно 3 в десятичной системе счисления.

Обратите внимание, что оператор | может также использоваться для логических значений. Отличие от оператора || в том, что второй операнд вычисляется, даже если первый операнд имеет значение истина .

Фактически, все побитовые операторы также работают с логическими значениями, включая xor ^ . Однако здесь нет соответствующего логического оператора. (Это было бы излишним, поскольку нет возможности выполнить "ленивую" оценку ^ :)

8
ответ дан 10 December 2019 в 00:32
поделиться

он использует оператор побитового ИЛИ. Для начала, 1 | 1 = 1, поэтому вторая 1 является лишней. Если мы удалим лишнюю 1, то получим уравнение 1 | 2 = 3. В двухбитовом двоичном формате это выглядит так:

01 | 10 = 11

Оператор or сопоставит соответствующие биты каждого из значений, и если в одном или обоих значениях для данной позиции есть 1, то результатом будет 1. Если в обоих значениях оба соответствующих бита, то результатом будет 0.

.
2
ответ дан 10 December 2019 в 00:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: