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

时间:2016-10-19 00:29:36

标签: boolean boolean-logic boolean-expression

我试图理解布尔逻辑和运算符。 我找到了这个例子,但无法理解为什么这个表达式将评估为如下所示。

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

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

在我看来,val1不是a或不是b或不是c,那么为什么它的评估结果不是1?

4 个答案:

答案 0 :(得分:1)

不是(a或b或c)首先评估或操作,因此它与(不是)或(不是b)或(不是c)不同。

实际上,它与(不是)AND(非b)AND(不是c)相同。

要么OR的操作数为真,都会给出一个真实的结果,然后NOT将整个表达式转换为假结果。

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

答案 1 :(得分:0)

  

.... val1不是b或不是b ...

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

答案 2 :(得分:0)

让我们说val1 = 1 1 = !(0 || 1 || 0) 1 = !(1) - 因为它是唯一等于val1的值 1 = 0 - 之后它会否定它

答案 3 :(得分:0)

让我们一步一步走。

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

首先,0 || 1将评估为1,因为||表示'如果其中至少有一个为真,则为真,否则为假',1 =真,0 =假。

现在是 val1 = !(1 || 0);此处1 || 0将再次评估为1,因为其中至少有一个是1.现在我们已经val1 = !(1);了。 !表示与输入相反,因此!(1) = 0。

  

在我看来,val1不是b或不是b,为什么它的评估结果不是1?

因为您所说的将被写为val1 = !0 || !1 || !0。它完全不同,因为它没有括号。括号表示'首先评估括号中的所有内容'。