评估布尔表达式

时间:2013-11-28 22:22:04

标签: java computer-science

我无法理解这个问题的答案,并希望得到更有经验的Java从业者的意见。

仅当布尔表达式 AB C 时,以下哪项才会评估为true都是假的吗?

(A)!A && !(B && !C)
(B)!A || !B || !C
(C)!(A || B || C)
(D)!(A && B && C)
(E)!A || !(B || !C)

我的回答是D,因为我的印象是 all 布尔表达式都是假的,但答案是C。

答案解释

(C)为了!(A || B || C)为真,(A || B || C)必须评估为false。仅当ABC 全部为false时才会发生这种情况。当AB为假且C为真时,选择A的评估结果为真。在选项B中,如果ABC中的任何一个为false,则布尔表达式的计算结果为true。在选项D中,如果ABC中的任何一个为假,则布尔表达式的计算结果为真,因为我们有!(false)。选择E评估为真所需要的只是A为假。由于true||(any)的计算结果为true,因此BC都可以为true或false。

2 个答案:

答案 0 :(得分:3)

我认为你只需要一些解释,并对正在发生的事情进行更详细的解释。

基础知识

如果其中一个||trueoperands之类的内容)为真,则OR运算符(A)输出B。所以在真值表中,看起来像这样:

A   B   OUTPUT
f   f   f
f   t   t
t   f   t
t   t   t

这是如何适用于您的

如您所见,OR逻辑输出false的唯一方法是所有操作数均为假。只有当 布尔表达式A,B和C都是假的时,问题才会说明

该列表中唯一符合该标准的人确实是C.让我们通过一个例子:

Assume A, B and C = False.
// We'll now test if option C is the correct one.

C: !(A || B || C)
// Let's plug in our values.
C: !(False || False || False)
// And let's simplify it. False || False || False = False.
C: !(False)
C: True.
// Success! Now we need to test it when one of the values are true.

C: !(True || False || False)
// Let's simplify again. True || Anything = True.
C: !(True).
C: False.

成功!我们现在知道,通过更改其中一个值,我们得到了False。因为我们改变了哪一个并不重要,我们通过演示证明C等同于False iff(if if only only) {{1} }。

为什么不是D?

让我们看一下A,B,C = False逻辑的真值表。

AND

正如您所看到的,A B OUTPUT f f f f t f t f f t t t 输出AND的唯一方法是,如果所有参数都是true,否则输出为false。虽然这意味着D将评估为false,但如果trueAB 包含 false,则评估为false;而问题明确指出所有必须是假的。

我希望这有帮助!

答案 1 :(得分:1)

当且仅当所有A && B && CAB都为真时,

C才为真。如果任何变量为false,则整个表达式为false。这意味着如果任何变量为false,则!(A && B && C)为真。

如果任何变量为真,则

A || B || C为真。如果所有变量都是假的,则仅为假。这意味着!(A || B || C)仅在所有变量都为假时才为真。