Как Java обрабатывает аргументы, разделенные |? - PullRequest
6 голосов
/ 08 июля 2010

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

например

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

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

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

3

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

Ответы [ 2 ]

8 голосов
/ 08 июля 2010

| является побитовым оператором или.

foo(1 | 2 | 1);

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

  • 1 в двоичном виде - 01
  • 2 в двоичном - 10

Побитовый или 01, а 10 - 11 это десятичное число 3.

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

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

2 голосов
/ 08 июля 2010

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

01 | 10 = 11

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...