有这样的东西吗?这是我第一次遇到对它的实际需求,但我在Stroustrup中没有看到它的列表。我打算写:
// Detect when exactly one of A,B is equal to five.
return (A==5) ^^ (B==5);
但是没有^^操作符。我可以使用这里的位^并得到正确的答案(不管机器表示的是真还是假)吗?我从不把&和&&混在一起,或者|和||混在一起,所以我不太愿意把^和^^混在一起。
我更愿意写我自己的bool XOR(bool,bool)函数。
以下是我认为在c++中如何编写异或比较的方法:
bool a = true; // Test by changing to true or false
bool b = false; // Test by changing to true or false
if (a == !b) // THIS IS YOUR XOR comparison
{
// do whatever
}
证明
XOR TABLE
a b XOR
--- --- ---
T T F
T F T
F T T
F F F
a == !b TABLE
a b !b a == !b
--- --- --- -------
T T F F
T F T T
F T F T
F F T F
证明是,对输入和输出的详尽研究表明,在两个表中,对于每个输入集,两个表中的结果总是相同的。
因此,最初的问题是如何写:
return (A==5) ^^ (B==5)
答案是
return (A==5) == !(B==5);
如果你喜欢,也可以写下来
return !(A==5) == (B==5);