【问题标题】:De Morgan's LawDe Morgan's Law
【发布时间】:2013-11-18 08:58:25
【问题描述】:

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

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

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

谢谢。

【问题讨论】:

  • 如果是正数,那么是,(x!=0) (x>0)。在编程中,您通常只会处理正数。因此,根据问题的不同,它通常是相同的,尽管当您不知道 X 是什么时,它是错误
  • ! (x!=0 || y !=0),你原来的陈述,和我想的一样简单。但是,要正确简化布尔代数,您必须将所有项转换为变量,true 和 false。将 0 视为错误产生 !(x||y) 可以转换为连词 !x && !y 但是,由于 0 实际上代表语句中的数字,因此您必须在其他地方考虑 != 0 用于术语和使用布尔值会导致您的逻辑语句。当然,在处理一组布尔数字(1 和 0)时,任何 x!=0 都是 x>0,但对于包括负数的数字集,它不是真的。

标签: java boolean-logic demorgans-law


【解决方案1】:

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

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


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

考虑这个规则:

  1. (第二个De Morgan's laws

1. 表示

!(x!=0 || y !=0) &lt;=&gt; (!(x!=0)) &amp;&amp; (!(y != 0))

2. 表示

(!(x!=0)) &amp;&amp; (!(y != 0)) &lt;=&gt; (x == 0) &amp;&amp; (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+")");
    }
}

【讨论】:

    【解决方案2】:

    DeMorgans Law 规定如下:

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

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

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

    【讨论】:

    • 我认为,他的意思是在他首先提到的法律中将 '!=' 替换为 '>'。
    • 我的意思是根据德摩根定律,x!=0 是否等于 x>0,但正如其他人所指出的那样,这是不正确的。
    【解决方案3】:

    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
    

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

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

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

        【讨论】:

          【解决方案6】:

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

          例如,如果我想要求用户输入一个必须是 0、1、2 或 3 的值,如果输入值不是(值 >= 0 且值

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

          但是!(value >= 0)表示(value 3),所以while循环写成while(value 3)

          希望这会有所帮助。

          【讨论】:

            猜你喜欢
            • 2012-06-04
            • 2014-08-13
            • 2017-05-31
            • 1970-01-01
            • 1970-01-01
            • 2019-06-28
            • 1970-01-01
            • 1970-01-01
            • 2023-03-10
            相关资源
            最近更新 更多