简单布尔逻辑

Simple Boolean Logic

我正在尝试确定以下表达式的条件,其中 ab 是正确声明的布尔变量,计算结果为 false:

(a && (b || !a)) == a && b

对我来说,这个表达式的计算结果似乎总是为真。如果 abfalse,则相等运算符的两边都将计算为 false。如果 ab 都为真,则双方的计算结果都为真。这就是所有的选项,也是我网上作业的正确答案。但是,当我 运行 在 IntelliJ CE 中使用 Java 11 JVM 时,似乎只要 b 为假,它就会打印假: when a and b are both false, IntelliJ outputs false

当 b 为假且 a 为真时,我得到相同的输出。有人可以解释我的逻辑错误在哪里吗?非常感谢。

我认为 == 操作优先于 &&

试试这个 -

(a && (b || !a)) == (a && b)

您的代码应该是:

boolean c = (a && (b || !a)) == (a && b);

否则计算为:

boolean c = ((a && (b || !a)) == a) && b;

布尔运算具有等效的数学运算(这就是 CPU 最终要做的)。您可以使用此方法检查任何方程式,以确保它符合您的预期。 它可以帮助您快速查看您的布尔逻辑是否适用于所有情况。

这里使用你的等式是一个例子:

将“true”替换为 1,将“false”替换为 0。将 && 替换为 *(如乘法)和 ||与+(如添加)。 !做你期望的事。然后检查是否相等 所以

a*(b+!a) == a*b

然后当 a = false (0) 和 b = false(0) 我们有

0*(0+1) == 0*0
or  0=0

这是真的。

我们可以继续检查其他选项。

a=1, b=1

1*(1+0) == 1*1
or 1=1

再次,正确

a=1, b=0

1*(0+1) == 1*0
1*1=0?

不正确(错误)。

通过最后一个测试,我们可以看到这个等式并不总是计算为真。就像在数学中一样,布尔运算有一个运算顺序(正如许多其他人提到的那样),但我喜欢使用这种方法来确保我的方程式按预期工作。