【问题标题】:What are the | and ^ operators used for? [duplicate]是什么|和 ^ 运算符用于? [复制]
【发布时间】:2011-04-13 17:34:45
【问题描述】:

可能重复:
What are bitwise operators?

最近我遇到了一些使用 |和 ^ 运算符。我猜这些是ornegation 运算符。

那么这些运算符究竟代表什么?

【问题讨论】:

  • 为什么投票赞成关闭
  • @TomTom:说真的,阅读语言规范???到底是谁干的。
  • @TomTom,如果您能详细说明一下,我会将其作为反馈。你的意思是我应该首先阅读所有规格和概念,然后开始开发
  • @Chris,如果它是骗子,那么找到骗子,问题就得到了回答。
  • @Ian:直到我学会了编写 C# 规范后,我才开始阅读 C# 规范(顺便说一句:一天?真的吗?这太疯狂了,我读了 fast i>),我敢说我是一个不错的开发人员,如果不是很好的话。

标签: c# .net operators


【解决方案1】:
  • | =(按位/非短路)“或”
  • ^ = "异或"

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

【讨论】:

    【解决方案2】:

    如果将它应用于整数类型,它们是按位或和异或运算符。 但是,如果将它们应用于布尔类型,它们是逻辑或和异或。 看or operatorxor operator的解释

    您可以从维基百科truth table 获得有关布尔运算的更多详细信息

    【讨论】:

      【解决方案3】:

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

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


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

      |Logical OR operator

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

      ^Logical XOR operator

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

      【讨论】:

      • -1 发布文档链接不是答案。
      • @Jon B,所以你通常喜欢一遍又一遍地重复事情吗?为什么不使用一个很好的资源来解释它而不是重新发明轮子?
      • @Filip - SO 是一组编程问题和答案,旨在超越其他网站并在 MSDN 等网站上的链接更改中存活下来。发布链接很好,但需要有相关的报价
      • 停止()!!!使用 System.Hammertime。
      • +1 @Flip。 SO 旨在包含问题的答案,就像 Wikipedia 包含内容一样。仅包含指向站外内容的链接的维基百科条目不是条目。
      【解决方案4】:

      它们是逻辑位运算符

      |是一个或link

      ^ 是 XOR link

      【讨论】:

        【解决方案5】:

        对于整数类型,|是按位或,^ 是按位异或,为了完整性,& 是按位与。

        对于布尔类型,|是一个布尔值或,^ 一个布尔值异或和 & 一个布尔值 &。

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

        ||和 && 比 | 更常用和 & 在布尔情况下,因为通常至少有很小的效率增益,而且永远不会损失。但是,如果右侧操作数具有在所有情况下都必须触发的副作用,那么 |或 & 将是使用的。在实践中,这种情况很少见,而且气味难闻(如果副作用很重要,则应在单独的表达式中对其进行评估,以使目的更明确)。

        编辑:一个潜在的混淆来源是,在某些其他语言中,整数类型可以用作布尔值(例如,您可以使用if(53),它与if(true) 相同)这使得上述运算符之间的区别非常明显不同:如果使用“纯”布尔类型(它的可能值只有 true 和 false),它们是相同的,但不是其他的。 C# 故意不允许对整数类型进行布尔运算,以防止此类语言中存在错误的可能性。

        【讨论】:

          【解决方案6】:

          ^逻辑异或

          | 逻辑或

          更新

          在c#中也是它的逻辑操作:

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

          【讨论】:

          • -1 这些都不是逻辑运算符。它们都是 BitWise ......你混合了 XOR 和 OR。
          • 除了得到 XOR 和 OR 向后从 emddudley 列出的 MSDN 文章中将它们都列为逻辑
          • 迈克尔,逻辑或运算符 || C/C++,本站底部注释(解释逻辑和位之间的区别)publib.boulder.ibm.com/infocenter/comphelp/v8v101/…
          • @Meakins:这个问题是关于 C# 的,而不是关于 C/C++ 的问题。在 C# 中,|^ 既可以是逻辑的也可以是位的。
          • @Meakins, @Justin Niessner:我认为将按位和逻辑视为相反的概念是不正确的。实际上它们是正交的,即 bitwise 实际上意味着 logical 操作应用于位级别。不管你怎么看,它始终是一个逻辑 AND、OR 或 XOR 操作。
          猜你喜欢
          • 2012-05-07
          • 1970-01-01
          • 1970-01-01
          • 2011-04-02
          • 2017-06-09
          • 2021-03-28
          • 2017-08-01
          相关资源
          最近更新 更多