什么是| 和^运算符用于?

可能重复:
什么是按位运算符?

最近我遇到了一些使用了|的样本 和^运算符。 我猜这些是or negation运算符。

那么这些运营商究竟代表什么呢?

如果将它应用于整数类型,则它们是按位或xor运算符。 但是,如果将它们应用于布尔类型,则它们是逻辑或xor。 看一下或运算符和xor运算符的解释

您可以从维基百科真值表中获取有关布尔运算的更多详细信息

  • | =(按位/非短路)“或”
  • ^ =“xor”

而对于信息,“不”(按位否定)是~

MSDN上有关于所有C#运算符的文档:

http://msdn.microsoft.com/en-us/library/6a71f45d.aspx


编辑 – Jon B评论说,链接文档中的相关引用会很有用。

| 是逻辑OR运算符 。

二进制| 运算符是为整数类型和bool预定义的。 对于整数类型,| 计算其操作数的按位OR。 对于bool操作数,| 计算其操作数的逻辑OR; 也就是说,当且仅当两个操作数均为假时,结果为false。

^是逻辑XOR运算符 。

二元^运算符是为整数类型和bool预定义的。 对于整数类型,^计算其操作数的按位异或。 对于bool操作数,^计算其操作数的逻辑异或; 也就是说,当且仅当其中一个操作数为真时,结果才为真。

它们是逻辑按位运算符

| 是一个或链接

^是异或链接

有积分类型,| 是一个按位或,^一个按位xor和完整性&是一个按位和。

使用布尔类型,| 是一个布尔值,或者是一个布尔值xor和一个布尔值&。

相比之下,|| 是短路布尔值 – 如果第一个操作数的计算结果为true,则不计算第二个操作数。 &&是一个短路布尔值 – 如果第一个操作数为假,则不计算第二个操作数。 没有短路^因为不存在不需要评估第二个的情况。

|| 和&&比…经常使用 和/在布尔情况下,因为通常至少有一个微小的效率增益而且永远不会丢失。 但是,如果右手操作数有副作用,在所有情况下触发都很重要,那么| 或者&将是使用者。 在实践中,这是罕见的,并且有难闻的气味(如果副作用很重要,则应该在单独的表达式中进行评估以使目的更清楚)。

编辑:潜在混淆的一个原因是,在其他一些语言中,整数类型可以用作布尔值(例如,你可以做if(53)并且它与if(true)相同)这使得上述运算符之间的区别大不相同:如果使用“纯粹的”布尔类型(它只有true和false作为其可能的值),它们是相同的,但不是这样。 C#故意不允许对整数类型进行精确的布尔运算,以防止这些语言中存在错误的可能性。

^逻辑异或

| 逻辑或

更新

在c#中它的逻辑运算:

  Console.WriteLine(true ^ false); // logical exclusive-or Console.WriteLine(false ^ false); // logical exclusive-or