Math 下面的表达式可以简化吗?

Math 下面的表达式可以简化吗?,math,algebra,Math,Algebra,下面的表达式可以简化吗 (M == null && C == null) || (M != null && C != null && D == C) 从数学上讲,我知道这是无法简化的,我检查了WolframAlpha以确认这一点,但我想知道是否有可能使用一个布尔逻辑运算符(&,|,^)来缩短条件。我试着想办法,但我有一个心理障碍。。。这真的可以缩短吗?如果假设D不是null,那么在第二个表达式中可以省略C!==null。如果假设D不是null,那

下面的表达式可以简化吗

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

从数学上讲,我知道这是无法简化的,我检查了WolframAlpha以确认这一点,但我想知道是否有可能使用一个布尔逻辑运算符(&,|,^)来缩短条件。我试着想办法,但我有一个心理障碍。。。这真的可以缩短吗?

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

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

(M==null和&C==null)| |(M!=null和&D==C)
这是可以做到的,因为从我在代码中看到的情况来看,D肯定有一个值,所以如果它为null,C就不会==到D。

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

这是可以做到的,因为从我在代码中看到的,D肯定有一个值,所以如果它为空,C就不会==到D。

在2个“规则”下,建议的表达式是真的: 规则#1:M和C都是空的,不管D的值是多少 规则#2:(2.a:M和C都不为空)和(2.b:D等于C)

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

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

(M == null && C == null) || (M != null && D == C)
false && true || true && true    
false || true
true
((M == null) && (C == null)) || (D == C)
false && true || true
false || true
true
而Jake最初提出的表达式将被解析为:

(M == null && C == null) || (M != null && C != null && D == C)
false && true || (true && false && true)
false || false
false
J.Bruni的公式将在M或C的情况下失败!=空(断开条件1或2a) 测试失败:M=not(null),C=null,D=null

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

根据2条“规则”,建议的表达式是正确的: 规则#1:M和C都是空的,不管D的值是多少 规则#2:(2.a:M和C都不为空)和(2.b:D等于C)

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

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

(M == null && C == null) || (M != null && D == C)
false && true || true && true    
false || true
true
((M == null) && (C == null)) || (D == C)
false && true || true
false || true
true
而Jake最初提出的表达式将被解析为:

(M == null && C == null) || (M != null && C != null && D == C)
false && true || (true && false && true)
false || false
false
J.Bruni的公式将在M或C的情况下失败!=空(断开条件1或2a) 测试失败:M=not(null),C=null,D=null

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

不,不能缩短

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

  • M
    C
    都为空,或者
  • M
    C
    都不为空,
    C
    D
    相等
在这两种情况下都需要检查
M
C
,因此无法简化表达式


有趣但只是稍微相关的注释:

如果不需要检查
C
D
是否相等,则表达式为

(M != null && C != null) || (M == null && C == null)
这可以简化为

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

M
C
具有相同的“空值”时,这是正确的。不,不能缩短

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

  • M
    C
    都为空,或者
  • M
    C
    都不为空,
    C
    D
    相等
在这两种情况下都需要检查
M
C
,因此无法简化表达式


有趣但只是稍微相关的注释:

如果不需要检查
C
D
是否相等,则表达式为

(M != null && C != null) || (M == null && C == null)
这可以简化为

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

M
C
具有相同的“null值”时,这是正确的。在某些语言中,null变量返回false,而非null变量单独使用时返回true,因此您也可以使用:(!M&&!C)|(M&&D==C)为什么D肯定有值?为什么不能为空?我在判断D在这种情况下的使用方式。如果为空,则为C=null&&D==C是绝对无用的,所以我假设D有一个值。如果不这样做,它就会失败。但是,如果它确实有一个值,这个方法会大大简化它的外观。(ok不太重要)在某些语言中,null变量返回false,而非null变量如果单独使用则返回true,因此您也可以使用:(!M&&!C)|(M&&D==C)为什么D肯定有值?为什么不能为空?我在判断D在这种情况下的使用方式。如果为空,则为C=null&&D==C是绝对无用的,所以我假设D有一个值。如果不这样做,它就会失败。但是,如果它确实有一个值,这个方法会大大简化它的外观。(没什么大不了的)