Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Logic 如何将逻辑语句转换为它们的对立面?_Logic - Fatal编程技术网

Logic 如何将逻辑语句转换为它们的对立面?

Logic 如何将逻辑语句转换为它们的对立面?,logic,Logic,我有一个场景,根据多个变量值检查是否隐藏某些内容。对于其中一些语句,如果它们的计算结果为true,那么我将跳过显示内容(默认情况下显示)。但是,我需要重新编写我的语句,以便如果它们的计算结果为true,那么我将显示一些内容(默认情况下隐藏) 例如: If X !== 1 && Y !==1 If X === 3 or Y === 3 例如: If X !== 1 && Y !==1 If X === 3 or Y === 3 如果这两个例子都是真的

我有一个场景,根据多个变量值检查是否隐藏某些内容。对于其中一些语句,如果它们的计算结果为true,那么我将跳过显示内容(默认情况下显示)。但是,我需要重新编写我的语句,以便如果它们的计算结果为true,那么我将显示一些内容(默认情况下隐藏)

例如:

If X !== 1 && Y !==1 
If X === 3 or Y === 3 
例如:

If X !== 1 && Y !==1 
If X === 3 or Y === 3 
如果这两个例子都是真的,那么我会跳过(隐藏)一些东西

我需要翻转代码中写的条件,这样表达式就是它们的对立面。我不能只计算原始表达式,然后交换最终的true/false结果。 会

逻辑上是对立的吗?我怎样才能重新编写这些表达式,使它们每次都得到相反的结果


我不能这么做!(如果X!==1&&Y!==1)在这种情况下。德摩根定律是否适用于我正在尝试做的事情?我正在考虑将所有“===”翻转到“!===”(反之亦然)并翻转所有“and/OR”,这样我就可以得到我想要的结果。这似乎适用于我尝试过的案例,但我不确定它是否适用于“所有”案例。谢谢大家!

如果目标是否定整个条件,最简单的方法就是将整个表达式包装在

例如,以下条件子句:

If X !== 1 && Y !== 1 
可以通过将其替换为以下内容来翻转:

If !(X !== 1 && Y !== 1)
现在,这是完全正确的,但你可能觉得它相当丑陋。这就是可以应用DeMorgan定律的地方,用一种等价但可能语法更简单的形式重写表达式

DeMorgan的法律规定:

  • !(x&y)==!x | |!y
    ,并且
  • !(x | | y)==!x&&!y
因此,我们可以拿上面难看(但正确翻转)的条件子句为例:

If !(X !== 1 && Y !== 1)
并使用上面列出的第一条DeMorgan定律重写它(完全不改变其含义):

然后通过简单的推理(
!(a!==b)
相当于
!(!(a==b))
相当于
a==b
):


这是(也是)原始子句的翻转版本
If X!==1&&Y!==1

如果我按照你的要求去做

If X !== 1 && Y !==1 
是:

这与:

if !(X !== 1 && Y !==1)
下面是如何思考的:在你的例子中,X和Y都不能等于1才是真的;因此,如果X或Y等于1,则该语句为false。现在把最后一句话转换成布尔值

当反转逻辑语句时,反转参数和逻辑条件:“and”变成“or”,反之亦然。

是的,这正是DeMorgan定律。
If X !== 1 && Y !==1 
if (X == 1 || Y == 1)
if !(X !== 1 && Y !==1)