我试图理解布尔逻辑和运算符。 我找到了这个例子,但无法理解为什么这个表达式将评估为如下所示。
说,a = 0,b = 1,c = 0
Expression Will Evaluate to
val1 = !(a || b || c); !(0 || 1 || 0) = !(1) = 0
在我看来,val1不是a
或不是b
或不是c
,那么为什么它的评估结果不是1?
答案 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
。它完全不同,因为它没有括号。括号表示'首先评估括号中的所有内容'。