|
=(按位/非短路)“或”^
=“异或”供参考,“not”(按位求反)是
~
MSDN 上有关于所有 C# 运算符的文档:
http://msdn.microsoft.com/en-us/library/6a71f45d.aspx
编辑 - Jon B 评论说链接文档中的相关引用会很有用。
|
是逻辑或运算符。
二进制 |运算符是为整数类型和布尔值预定义的。对于整数类型,|计算其操作数的按位或。对于布尔操作数, |计算其操作数的逻辑或;也就是说,当且仅当两个操作数都为 false 时,结果才为 false。
^
是逻辑异或运算符。
二元 ^ 运算符是为整数类型和 bool 预定义的。对于整型,^ 计算其操作数的按位异或。对于 bool 操作数,^ 计算其操作数的逻辑异或;也就是说,当且仅当其操作数之一为 true 时,结果才为 true。
对于整数类型,|是按位或,^ 是按位异或,为了完整性,& 是按位与。
对于布尔类型,|是布尔值或,^ 布尔值异或和 & 布尔值 &。
相比之下,||是一个短路布尔值或 - 如果第一个操作数计算为 true,则不计算第二个操作数。 && 是一个短路布尔值,并且 - 如果第一个操作数为 false,则不计算第二个操作数。不存在短路^,因为不存在不需要评估第二个的情况。
||和 && 比 | 更常用和 & 在布尔情况下,因为通常至少会带来微小的效率增益,而不会造成损失。但是,如果右侧操作数具有在所有情况下都必须触发的副作用,那么 |或 & 将是要使用的一个。在实践中,这种情况很少见,而且味道不好(如果副作用很重要,则应在单独的表达式中对其进行评估,以使目的更清晰)。
编辑:潜在混淆的一个来源是,在某些其他语言中,整数类型可以用作布尔值(例如,您可以执行
if(53)
并且它与 if(true)
相同),这使得上述运算符之间的区别非常不同:如果使用“纯”布尔类型(只有 true 和 false 作为其可能值),它们是相同的,但其他情况下则不同。 C# 故意不允许对整型进行布尔运算,正是为了防止此类语言中存在错误的可能性。
^
逻辑异或
|
逻辑或
更新
在 C# 中也有逻辑运算:
Console.WriteLine(true ^ false); // logical exclusive-or
Console.WriteLine(false ^ false); // logical exclusive-or