C # логическая операция вопрос - PullRequest
8 голосов
/ 11 февраля 2011

почему это так:

(true | false & false)

и это неверно:

(true | false && false)

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

Ответы [ 3 ]

15 голосов
/ 11 февраля 2011

Они связываются как:

true | (false & false)  // true

и

(true | false) && false  // false

Я бы не стал писать код, основанный на этих правилах - читателю это явно не понятно:)

Для справки см. Раздел 7.3.1 спецификации языка C # 4, в которой указано, что & имеет более высокий приоритет, чем | (отсюда первый результат), и | имеет более высокий приоритет, чем && (отсюда и второй результат).

3 голосов
/ 11 февраля 2011

& имеет приоритет |, который имеет приоритет &&, поэтому ваши выражения оцениваются как

(true | (false & false)) = (true | false) = true

и

((true | false) && false) = (true && false) = false

См. ссылка на операторы C # , содержащая их приоритет для получения дополнительной информации.

3 голосов
/ 11 февраля 2011

Это из-за приоритета оператора здесь

...