Почему!(0 || 1 || 0) равно 0?

Я пытаюсь понять булеву логику и операторы. Я нашел этот пример, но не могу понять, почему это выражение будет соответствовать приведенному ниже.

Скажем, а = 0, б = 1, с = 0

           Expression           Will Evaluate to
val1 = !(a || b || c);        !(0 || 1 || 0) = !(1) = 0

На мой взгляд, val1 не a или нет b или нет cтак почему он оценивает не 1?

4 ответа

Решение

Not(a или b или c) сначала оценивает операции или, поэтому это не то же самое, что (не a), (не b) или (не c).

Действительно, это то же самое, что (не а) И (не б) И (не в).

Любой операнд ИЛИ, являющийся истинным, даст истинный результат, а затем НЕ переворачивает это на ложный результат для выражения в целом.

Как и в случае арифметики целых или действительных чисел, порядок операций может значительно изменить результат.

.... val1 не является или не b или не с...

Нет, это неверно. 0 || 1 || 0 внутри скобки оценивается первым. Пример имеет это право.

Пойдем пошагово.

val1 = !(0 || 1 || 0);

Во-первых, 0 || 1 будет оценивать до 1, потому что || означает "истина, если хотя бы один из них является истиной, в противном случае - ложь", и 1 = истина, 0 = ложь.

Так что теперь этоval1 = !(1 || 0); Вот 1 || 0 будет снова оценивать до 1, потому что по крайней мере один из них равен 1. Теперь у нас есть val1 = !(1);, ! означает противоположность ввода, так !(1) = 0

На мой взгляд, val1 не a или не b или не c, так почему он оценивает не 1?

Потому что то, что вы говорите, будет написано как val1 = !0 || !1 || !0, Это совсем другое, потому что у него нет круглых скобок. Круглая скобка означает "сначала оцените все в скобках".

Скажем val1 = 11 = !(0 || 1 || 0)1 = !(1) - потому что это единственное значение, равное val11 = 0 - тогда это отрицает это потом

Другие вопросы по тегам