我想知道有没有办法将Exclusive-OR(对于两个操作数称为XOR)运算符应用于多个谓词?
例如,假设p
,q
和r
是三个谓词(换句话说是布尔变量)。我想写一个if
这样的条件:
if ((p || q || r) && !(p && q && r))
即。如果其中至少有一个是真的但不是全部,我希望条件成立。
显然if (p ^ q ^ r)
无效(考虑案例p=true
,q=true
和r=false
)
谢谢。
我对 c 语言给出了一个很好的答案,但我很有兴趣知道 c#是否有解决方案?
答案 0 :(得分:3)
这是一种方法:
if ((!!p + !!q + !!r) % 3)
但这对自己的好处来说可能太聪明了。
编辑:
if (((p ? 1 : 0) + (q ? 1 : 0) + (r ? 1 : 0)) % 3 != 0) // C#-compatible version
答案 1 :(得分:2)
你想要的实际上不是将XOR应用于三个或更多个参数,因此标题中的问题具有误导性。 XOR的推广基本上是检查真值的数量是否为奇数,这是(p ^ q ^ r)
表达式计算的结果。
C没有任何操作员可以检查你的情况(“至少其中一个是真的,但不是全部的”),所以你的符号:
((p || q || r) && !(p && q && r))
似乎是C中最惯用的。
答案 2 :(得分:-2)
if (((p ^ q) ^ r)&!(p&q&r)) should work in your example