6

我正在尝试使用德摩根定律简化以下内容:!(x!=0 || y !=0)

x!=0 是否简化为 x>0?还是我在以下方面错了:

 !(x>0 || y>0)
 !(x>0) && !(y>0)
 ((x<=0) && (y<=0))

谢谢。

4

6 回答 6

6

x!=0 是否简化为 x>0?

不,那不是真的。因为整数是有符号的。


如何简化: !(x!=0 || y !=0)

考虑以下规则:

  1. 在此处输入图像描述(第二德摩根定律

  2. 在此处输入图像描述

由 1. 表示

!(x!=0 || y !=0) <=> (!(x!=0)) && (!(y != 0))

由 2. 表示

(!(x!=0)) && (!(y != 0)) <=> (x == 0) && (y == 0)


要测试,您可以编写以下循环:

for(int x = -5; x < 5; x++){
     for(int y = -5; y < 5; y++){
         if(!(x!=0 || y !=0))
            System.out.println("True : ("+x+","+y+")");
    }
}
于 2013-11-18T09:04:46.107 回答
3

DeMorgans Law 规定如下:

!(A & B) = !A | !B    (I)
!(A | B) = !A & !B    (II)

在您的情况下(II)适用:!(x!=0 || y!=0)=> !(x!=0) && !(y!=0)=>(x==0) && (y==0)

PS:您的问题:“x!=0 是否简化为 x>0?” 可以用“否”回答,除非 x 不能取负值(例如,如果 x 的类型是无符号的)。

于 2013-11-18T09:07:22.690 回答
1

x!=0 是否简化为 x>0?还是我在以下方面错了:

x != 0  // reads x does not equal 0; any number BUT 0

x > 0 // reads x is greater than 0; only numbers greater than 0

当你这样写出来时,这两个看起来一样吗?

结合

(x != 0 && x > 0) // any number above 0
(x != 0 || x > 0) // any number BUT 0
于 2013-11-18T09:01:53.423 回答
1

在 java 中,整数总是有符号的,因此 x!=0 不一定与 x>0 相同

于 2013-11-18T09:02:54.913 回答
0

根据德摩根定律,前两个比较的转换如下。

 !(x>0 || y>0)        --->      x <= 0 && y <= 0

 !(x>0) && !(y>0)     --->      !(x <=0 || y <=0)   
于 2013-11-18T09:11:16.353 回答
0

当我教如何编写 Java do-while循环时,我会解释如何编写终止循环的条件。

例如,如果我想要求用户输入一个必须是 0、1、2 或 3 的值,如果输入值不是(值 >= 0 且值 <= 3),我希望 while 条件继续.

这转换为 while (!(value >= 0) 或 !(value <= 3))。

但是 !(value >= 0) 的意思是 (value < 0),而 !(value <= 3) 的意思是 (value > 3),所以 while 循环写成while (value < 0 || value > 3)

希望这可以帮助。

于 2016-01-21T19:28:22.447 回答