2

可能重复:
|= (单管道相等) 和 &=(单 & 符号相等) 在 c# (csharp) 中是什么意思

这是使用它的上下文:

long dirtyFlag = 0x0000;

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

6 回答 6

7

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

1 | 2 = 3 (0001 | 0010 = 0011)
2 | 4 = 6 (0010 | 0100 = 0110)
5 | 1 = 5 (0101 | 0001 = 0101)
于 2012-10-12T22:48:27.783 回答
3
a |= b

是相同的

a = a | b

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

如果您想了解诸如位运算符之类的|,请查看按位运算和用法

于 2012-10-12T22:49:20.000 回答
2

| 是按位或运算符。它需要两个数值并逐位比较它们,如果其中任何一个位等于 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
于 2012-10-12T22:55:19.683 回答
1

它将对您的dirtyFlag执行按位或,与执行相同

dirtyFlag = dirtyFlag | 0x0001;

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

0000
0001
----
0001

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

于 2012-10-12T22:52:10.253 回答
0

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

于 2012-10-12T22:48:28.357 回答
0

它的意思是or equals

dirtyFlag = dirtyFlag | 0x0001;
于 2012-10-12T22:48:34.080 回答