последовательность действий в логическом выражении - PullRequest
0 голосов
/ 27 декабря 2018

Я хочу спросить о правильной последовательности «чтения» этого логического выражения:

(true && false | true) 

Я думал, что оно возвращает false, из-за первого выражения - true && false Но, вероятно, я делаю что-то не так иэто должно быть "чтение" по-другому.Можете ли вы объяснить, как правильно читать?

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Удерживая ниже точки в уведомлении:

Все бинарные операторы, кроме операторов присваивания, оцениваются слева направо;операторы присваивания оцениваются справа налево.

Это будет выполнено слева направо.После этого следует рассмотреть второй пункт: Приоритет оператора .

|- побитовый оператор, а && - логическая операция.побитовый оператор имеет больший приоритет, чем логический оператор.

В вашем случае первая оценка будет ложной |Значение true, равное true.

, тогда оно будет оценивать истинный результат &&, приведенный выше, который равен true.

, поэтому данное утверждение будет истинным.

0 голосов
/ 27 декабря 2018

Проверьте следующую таблицу Приоритет операторов .

| (поразрядное ИЛИ) имеет более высокий приоритет, чем && (логическое И), поэтому false | true оценивается первым.

Тем не менее, порядок оценки не имеет значения в вашем примере.И (true && false) | true, и true && (false | true) возвращают true.В первом случае это false | true), то есть true.Во втором случае это true && true, что также true.

Теперь, вот пример, где приоритет оператора имеет значение:

System.out.println (false && true | true);
System.out.println (false && true || true);

| имеет более высокийприоритет чем &&, но && имеет более высокий приоритет, чем ||.

Поэтому эти выражения оцениваются как:

System.out.println (false && (true | true));
System.out.println ((false && true) || true);

В результате первое возвращает false а второй возвращает true.

...