2

我想知道有没有办法将异或(对于两个操作数称为 XOR)运算符应用于多个谓词?

例如p,假设qr是三个谓词(换句话说,布尔变量)。我想写一个if这样的条件:

if ((p || q || r) && !(p && q && r))

即,如果至少其中一个为真但不是全部为真,我希望条件为真。

显然if (p ^ q ^ r)行不通(考虑这种情况p=trueq=truer=false

谢谢你。


我对c语言有一个很好的答案,但我很高兴知道c#中是否有解决方案?

4

3 回答 3

3

这是一种方法:

if ((!!p + !!q + !!r) % 3)

但这可能太聪明了。

编辑:

if (((p ? 1 : 0) + (q ? 1 : 0) + (r ? 1 : 0)) % 3 != 0)  // C#-compatible version
于 2012-11-25T00:24:51.643 回答
2

您想要的实际上不是 XOR 应用于三个或更多参数,因此标题中的问题具有误导性。XOR 的泛化基本上是检查真值的数量是否为奇数,这是(p ^ q ^ r)表达式计算的内容。

C 没有任何运算符可以检查您的条件(“至少其中一个为真,但不是全部为真”),因此您的符号为:

((p || q || r) && !(p && q && r))

似乎是 C 中最惯用的。

于 2012-11-25T00:24:51.343 回答
-2
if (((p ^ q) ^ r)&!(p&q&r)) should work in your example

http://en.wikipedia.org/wiki/Exclusive_or

于 2012-11-25T00:20:57.997 回答