什么是| =运营商呢?

时间:2012-10-12 22:47:10

标签: c#

  

可能重复:
  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...
}

6 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:3)

a |= b

相同
a = a | b

对于许多运营商来说都是一样的,例如+=/=

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

答案 2 :(得分:2)

|是按位OR运算符。它需要两个数值并逐位比较它们,如果其中一个位等于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变量用于跟踪编辑的字段。

我会想象有一系列值正在被比较。 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

答案 3 :(得分:1)

它会在你的dirtyFlag上执行bitwise OR, 它和做

一样
dirtyFlag = dirtyFlag | 0x0001;

所以基本上它是一个短的anotation,代表OR等于。 OR之前的dirtyFlag是0x0000,它与0x0001执行OR 因为你的两个值都被认为是十六进制值,所以

0000
0001
----
0001

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

这意味着or equals

dirtyFlag = dirtyFlag | 0x0001;