Gil*_*man 74 c# operators xor boolean-operations
为什么C#没有条件XOR
运算符?
例:
true xor false = true
true xor true = false
false xor false = false
Run Code Online (Sandbox Code Playgroud)
pio*_*rpo 248
问题有点过时但......
这个操作符应该如何工作:
true xor false = true
true xor true = false
false xor false = false
Run Code Online (Sandbox Code Playgroud)
这就是!=运算符与bool类型一起使用的方法:
(true != false) // true
(true != true) // false
(false != false) // false
Run Code Online (Sandbox Code Playgroud)
所以你看到^^
现有的可以被替换掉!=
The*_*ebo 109
在C#中,条件运算符仅在必要时才执行其辅助操作数.
由于XOR 必须按定义测试两个值,因此条件版本将是愚蠢的.
示例:
逻辑AND:&
- 每次测试双方.
逻辑或:|
- 每次测试双方.
条件AND:&&
- 如果第一侧为真,则仅测试第二侧.
条件OR:||
- 如果第一侧为假,则仅测试第二侧.
Ric*_*dCL 23
正如澄清一样,^运算符适用于整数类型和bool.
请参阅MSDN的^运算符(C#参考):
二元^运算符是为整数类型和bool预定义的.对于整数类型,^计算其操作数的按位异或.对于bool操作数,^计算其操作数的逻辑异或; 也就是说,当且仅当其中一个操作数为真时,结果才为真.
自2011年提出此问题以来,文档可能已发生变化.
Sim*_*low 11
正如Mark L所说,这是正确的版本:
Func<bool, bool, bool> XOR = (X,Y) => ((!X) && Y) || (X && (!Y));
Run Code Online (Sandbox Code Playgroud)
这是真值表:
X | Y | Result
==============
0 | 0 | 0
1 | 0 | 1
0 | 1 | 1
1 | 1 | 0
Run Code Online (Sandbox Code Playgroud)
参考: 独家OR
哦,是的。
bool b1 = true;
bool b2 = false;
bool XOR = b1 ^ b2;
Run Code Online (Sandbox Code Playgroud)