【问题标题】:What does |= operator do? [duplicate]|= 运算符有什么作用? [复制]
【发布时间】:2012-10-03 19:17:36
【问题描述】:

可能重复:
what does |= (single pipe equal) and &=(single ampersand equal) mean in c# (csharp)

这是使用它的上下文:

long dirtyFlag = 0x0000;

if (erd.SupervisorCompType != orgErd.SupervisorCompType) // change has been made?
{
   dirtyFlag |= 0x0001;
   // etc...
}

【问题讨论】:

    标签: c#


    【解决方案1】:

    dirtyFlag |= 0x0001 等价于dirtyFlag = dirtyFlag | 0x0001| 运算符是按位或运算符。在您的情况下,它设置最低的二进制位。一些进一步的例子:

    1 | 2 = 3 (0001 | 0010 = 0011)
    2 | 4 = 6 (0010 | 0100 = 0110)
    5 | 1 = 5 (0101 | 0001 = 0101)
    

    【讨论】:

    • 你能从 ATM 机上用你的 PIN 码得到一个二进制位吗? :-)
    • 这和ATM机有什么关系?
    • “嗖嗖”很幽默 :-) 位是“二进制数字”,因此“二进制位”是多余的,很像“自动柜员机”或“个人识别号码”。
    • @paxdiablo 我觉得很幽默,我已经变得如此擅长解析可怕的英语,以至于我什至没有注意到你评论中的三个 reudnadnt 陈述中的任何一个。
    • @paxdiablo 看起来 OP 可能不知道什么是按位运算,所以我想我会有点多余来帮助他搜索更多信息/触发按位运算的记忆。
    【解决方案2】:
    a |= b
    

    相同
    a = a | b
    

    对于很多运算符来说都是一样的,比如+=/=

    如果您想了解| 等按位运算符,请查看Bitwise operation and usage

    【讨论】:

      【解决方案3】:

      |是按位或运算符。它采用两个数值并逐位比较它们,如果其中任何一个位等于 1,则该位位置返回 1

      // Just as
      myIntegerValue += 1;
      // is the same as writing
      myIntegerValue = myIntegerValue + 1;
      
      // It follows that
      dirtyFlag |= 0x0001;
      // is the same as writing
      dirtyFlag = dirtyFlag | 0x0001;
      

      dirtyFlag 变量跟踪哪些字段被编辑。

      我想有一系列的值正在被比较。脏标志会让你知道哪些值需要修改。

      value0 = 0x0001 in hexadecimal =  1 = 00000001 in binary
      value1 = 0x0002 in hexadecimal =  2 = 00000010 in binary
      value2 = 0x0004 in hexadecimal =  4 = 00000100 in binary
      value3 = 0x0008 in hexadecimal =  8 = 00001000 in binary
      value4 = 0x0010 in hexadecimal = 16 = 00010000 in binary
      

      所以如果你修改了字段 0 和 4,dirtyFlag 将是

      00010001 = 17 = 0x0011
      

      【讨论】:

        【解决方案4】:

        它将在你的dirtyFlag上执行bitwise OR, 和做的一样

        dirtyFlag = dirtyFlag | 0x0001;
        

        所以基本上它是一个简短的注释,代表 OR 等于。 OR 之前的dirtyFlag 是 0x0000 并且它执行 OR 与 0x0001 因为你的两个值都被认为是十六进制值,所以它会这样做

        0000
        0001
        ----
        0001
        

        所以基本上它会将你的标志设置为 1,这就是它所做的一切

        【讨论】:

          【解决方案5】:

          或等于。此代码将设置 1 位。

          【讨论】:

            【解决方案6】:

            意思是or equals

            dirtyFlag = dirtyFlag | 0x0001;
            

            【讨论】:

            • 正在评估什么 OR 条件?
            猜你喜欢
            • 2020-07-21
            • 2017-10-26
            • 2011-08-19
            • 2015-01-07
            • 2018-01-03
            • 2013-01-09
            • 2020-04-02
            • 2023-03-24
            • 1970-01-01
            相关资源
            最近更新 更多