答案 0 :(得分:25)
|
=(按位/非短路)“或”^
=“xor”并且对于info,“not”(按位否定)是~
答案 1 :(得分:17)
如果将它应用于整数类型,则它们是按位或xor运算符。 但是,如果将它们应用于布尔类型,则它们是逻辑或xor。 查看or operator和xor operator
的说明您可以从维基百科truth table
获取有关布尔操作的更多详细信息答案 2 :(得分:7)
MSDN有关于所有C#运营商的文档:
http://msdn.microsoft.com/en-us/library/6a71f45d.aspx
编辑 - Jon B评论说,链接文档中的相关引用会很有用。
二进制|运算符是为整数类型和bool预定义的。对于整数类型,|计算其操作数的按位OR。对于bool操作数,|计算其操作数的逻辑OR;也就是说,当且仅当两个操作数均为假时,结果为false。
二进制^运算符是为整数类型和bool预定义的。对于整数类型,^计算其操作数的按位异或。对于bool操作数,^计算其操作数的逻辑异或;也就是说,当且仅当其中一个操作数为真时,结果才为真。
答案 3 :(得分:2)
答案 4 :(得分:2)
使用整数类型,|是一个按位或者,一个按位xor和完整性&是一个按位和。
使用布尔类型,|是一个布尔值,或者是一个布尔值xor和&布尔&。
相比之下,||是一个短路布尔值 - 如果第一个操作数的计算结果为true,则不计算第二个操作数。 &安培;&安培;是一个短路布尔值 - 如果第一个操作数为假,则不计算第二个操作数。没有短路^因为不存在不需要评估第二个的情况。
||和&&比|经常使用和&在布尔情况下,因为通常至少有一个微小的效率增益而且永远不会丢失。但是,如果右手操作数有副作用,在所有情况下触发都很重要,那么|或者&将是一个使用。在实践中,这是罕见的,并且有难闻的气味(如果副作用很重要,应该在单独的表达式中进行评估,以使目的更清晰)。
编辑:潜在混淆的一个原因是,在其他一些语言中,整数类型可以用作布尔值(例如,你可以if(53)
,它与if(true)
相同)这使得区别上面的运算符完全不同:如果使用“纯粹”的布尔类型(它只有true和false作为其可能的值),它们是相同的,但不是其他。 C#故意不允许对整数类型进行精确的布尔运算,以防止存在这些语言中存在错误的可能性。
答案 5 :(得分:-6)
^
逻辑XOR
|
逻辑OR
更新
在c#中也是逻辑运算:
Console.WriteLine(true ^ false); // logical exclusive-or
Console.WriteLine(false ^ false); // logical exclusive-or