可以简化以下表达式吗?

时间:2012-03-01 02:29:36

标签: math algebra

可以简化以下表达式吗?

(M == null && C == null) ||
(M != null && C != null && D == C)

在数学上我知道这不能简化,我检查了WolframAlpha以确认这一点,但我想知道是否可以使用其中一个布尔逻辑运算符(&,|,^)来制作那个条件更短。我试着想办法,但我有精神障碍......这实际上有可能缩短吗?

4 个答案:

答案 0 :(得分:2)

根据2'规则',建议的表达式是正确的: 规则#1:无论D的值如何,M和C都为空 规则#2:(2.a:M和C都不为空)AND(2.b:D等于C)

如果D为空,则Shingetsu的公式将失败(意味着C == null,这违反了规则#2a)

测试失败:M =不(null),C = null,D = null

(M == null && C == null) || (M != null && D == C)
false && true || true && true    
false || true
true

虽然杰克的原始提议表达式将被解析为:

(M == null && C == null) || (M != null && C != null && D == C)
false && true || (true && false && true)
false || false
false

学家在M或C的情况下,Bruni的公式将失败!= null(破坏条件1或2a) 测试失败:M =不(null),C = null,D = null

((M == null) && (C == null)) || (D == C)
false && true || true
false || true
true

答案 1 :(得分:2)

不,它不能缩短。

正如Ferdinand Liu所观察到的,在两种情况下你的表达是正确的:

  • MC都为空,或
  • MC 为空,CD相等。

您需要在两个条件中同时检查MC,这样就无法简化表达式。


有趣但只有轻微相关的说明:

如果您不需要检查CD是否相等,那么表达式将是

(M != null && C != null) || (M == null && C == null)

可以简化为

!((M == null) ^ (C == null))

MC具有相同的“null-ness”时,这是真的。

答案 2 :(得分:0)

如果你假设D不是null,那么在第二个表达式中你可以省略C!== null。

答案 3 :(得分:0)

(M == null&& C == null)|| (M!= null&& D == C)
这可以做到,因为从我在你的代码中看到的,D明确地有一个值,所以如果它是null,则C不会是==到D.