我的条件如下:
if (!(InRange1 || InRange2 || InRange3))
{
//Do Something
}
每个InRange变量都是布尔值。
期望的行为是,如果这些值中的任何一个是假的我想做某事,但它不是那样工作的。在触发事件之前,所有值都必须为false。
是否需要写成
if (!InRange1 || !InRange2 || !InRange3)
{
//do something
}
而且,在任何一种情况下,我都很好奇为什么原始陈述不起作用。
答案 0 :(得分:9)
您可以使用DeMorgan's Law。
你拥有的东西相当于NOR。 !(A | B | C)
相当于德摩根定律的!A & !B & !C
。
你想要的是NAND,所以!(A && B && C)
。这与您正在寻找的内容完全相同 - !A | !B | !C
。
答案 1 :(得分:4)
你的第二个假设是正确的。
查看boolean algebra和De Morgan's law。
您可以将其写为not(A) OR not(B) or not(C)
,或not(A AND B AND C)
。
所以
if (!(InRange1 && InRange2 && InRange3))
{
//Do Something
}
和
if (!InRange1 || !InRange2 || InRange3)
{
//Do Something
}
是等价的。