简单布尔逻辑
Simple Boolean Logic
我正在尝试确定以下表达式的条件,其中 a
和 b
是正确声明的布尔变量,计算结果为 false
:
(a && (b || !a)) == a && b
对我来说,这个表达式的计算结果似乎总是为真。如果 a
或 b
是 false
,则相等运算符的两边都将计算为 false
。如果 a
和 b
都为真,则双方的计算结果都为真。这就是所有的选项,也是我网上作业的正确答案。但是,当我 运行 在 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?
不正确(错误)。
通过最后一个测试,我们可以看到这个等式并不总是计算为真。就像在数学中一样,布尔运算有一个运算顺序(正如许多其他人提到的那样),但我喜欢使用这种方法来确保我的方程式按预期工作。
我正在尝试确定以下表达式的条件,其中 a
和 b
是正确声明的布尔变量,计算结果为 false
:
(a && (b || !a)) == a && b
对我来说,这个表达式的计算结果似乎总是为真。如果 a
或 b
是 false
,则相等运算符的两边都将计算为 false
。如果 a
和 b
都为真,则双方的计算结果都为真。这就是所有的选项,也是我网上作业的正确答案。但是,当我 运行 在 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?
不正确(错误)。
通过最后一个测试,我们可以看到这个等式并不总是计算为真。就像在数学中一样,布尔运算有一个运算顺序(正如许多其他人提到的那样),但我喜欢使用这种方法来确保我的方程式按预期工作。