为什么 !(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 不是 a
或 b
或 c
,那么为什么它的计算结果不是 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'。
我正在尝试理解布尔逻辑和运算符。 我找到了这个例子,但不明白为什么这个表达式的计算结果如下所示。
比如说,a = 0,b = 1,c = 0
Expression Will Evaluate to
val1 = !(a || b || c); !(0 || 1 || 0) = !(1) = 0
如我所见,val1 不是 a
或 b
或 c
,那么为什么它的计算结果不是 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'。