可能重复:
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...
}
答案 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)
答案 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;