如何否定这个逻辑表达式?

时间:2018-11-14 03:18:11

标签: logic logical-operators boolean-logic

因此,现在我的代码具有以下内容:

if(DateA <= utcNow || (DateA == null && DateB <= utcNow)) doSomething();

我现在想做这样的事情:

if(!InitialExpression) continue;

AFAIK,如果为A || B,则取反为!A && !B。 但这不起作用:if(DateA > utcNow && (DateA != null || DateB > utcNow)) continue;。 当DateA = nullDateB > utcNow出现时,它应该属于继续,但不是。

编辑:

我的错误是假设DateA <= utcNow的反义词是DateA > utcNow。但这是DateA == null || DateA > utcNow

3 个答案:

答案 0 :(得分:0)

  • 选项1-使用ELSE语句

if(DateA <= utcNow || (DateA == null && DateB <= utcNow)) {doSomething() }else{ dpSomethingElse();

  • 选项2-在运算符中使用!

if(!(DateA <= utcNow || (DateA == null && DateB <= utcNow))) doSomethingElse();

  • 选项3-否定-首先需要DataA不为空的条件。缺少一些上下文,但是假设您想通过确保给DateA大于utcNow的优先权来否定表达式,否则请检查DateB是否大于utcNow

if((DateA != null && DateA > utcNow) || DateB > utcNow) doSomethingElse()

答案 1 :(得分:0)

DateA <= utcNow || (DateA == null && DateB <= utcNow)的反义词是

(DateA == null || DateA > utcNow) && (DateA != null || DateB == null || DateB > utcNow)

答案 2 :(得分:0)

@Felipe,您的逻辑还不错。只是您忽略了一个小方面。 >的取反不只是NULL,它还包含一个OR值。只需将这两个条件与一个(DateA == null || DateA > utcNow) && (DateA != null || DateB == null || DateB > utcNow) 运算符相加即可。这应该起作用。

检查以下更新的语句:

add_filter