为什么这段代码可以退出while循环
while (!(!(x < 5) || !(y < 5)))
但这不是
while ((x < 5) || (y < 5))
答案 0 :(得分:4)
两个表达式都不相同,
!(!A||!B) = A && B
检查德摩根定律
http://www.allaboutcircuits.com/textbook/digital/chpt-7/demorgans-theorems/
答案 1 :(得分:0)
打破它:
(!(!(x < 5) || !(y < 5)))
!(x < 5)
相当于x >= 5
,类似于y
,所以上述内容相当于
!(x >= 5 || y >= 5)
如果true
或x
为5或更高,括号中的表达式为y
。因此,对于表达式false
, x
和y
必须小于5 - 因为如果任何一个大于或等于5括号表达式为true
。如果带括号的部分为!
,则true
表示整个表达式为false
。因此,仅当true
和x
都小于5时,表达式才为y
。也就是说,它等同于
x < 5 && y < 5
这是DeMorgan法律的一个应用,但你不需要记住或理解法律,看看它是如何运作的。你真正需要做的就是通过表达式思考并弄清楚表达式在什么条件下是真还是假。 (如果你有一个包含大量变量的更复杂的表达式,那么DeMorgan定律可能是有用的。但在这种情况下,最好只是打破表达式并引入一些中间boolean
变量无论如何;否则你将无法理解你所写的内容,也不会有任何其他人。)