为什么 !(0 || 1 || 0) 是 0?

Why !(0 || 1 || 0) is 0?

我正在尝试理解布尔逻辑和运算符。 我找到了这个例子,但不明白为什么这个表达式的计算结果如下所示。

比如说,a = 0,b = 1,c = 0

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

如我所见,val1 不是 abc,那么为什么它的计算结果不是 1?

.... val1 is not a or not b or not c ...

不,这是不正确的。首先评估括号内的 0 || 1 || 0 。这个例子是对的。

假设 val1 = 1 1 = !(0 || 1 || 0) 1 = !(1) - 因为它是唯一等于 val1 的值 1 = 0 - 然后它会在之后否定它

Not(a or b or c) 首先计算 or 运算,因此它与 (not a) or (not b) or (not c) 不同。

的确,它与 (not a) AND (not b) AND (not c) 相同。

OR 的任一操作数为真将给出真结果,然后 NOT 将其翻转为整个表达式的假结果。

与整数或实数运算一样,运算顺序会极大地改变结果。

让我们一步一步来。

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

首先,0 || 1 的计算结果为 1,因为 || 表示 'true if at least one of them is true, otherwise false',而 1 = true,0 = false。

所以现在是 val1 = !(1 || 0); 这里 1 || 0 将再次计算为 1,因为其中至少有一个为 1。现在我们得到 val1 = !(1);!表示与输入相反,所以!(1) = 0.

As I see it, val1 is not a or not b or not c, so why it evaluates to not 1 ?

因为你说的会写成val1 = !0 || !1 || !0。它完全不同,因为它没有括号。括号表示 'evaluate everything in the parenthesis first'。