这是使用它的上下文:
long dirtyFlag = 0x0000;
if (erd.SupervisorCompType != orgErd.SupervisorCompType) // change has been made?
{
dirtyFlag |= 0x0001;
// etc...
}
这是使用它的上下文:
long dirtyFlag = 0x0000;
if (erd.SupervisorCompType != orgErd.SupervisorCompType) // change has been made?
{
dirtyFlag |= 0x0001;
// etc...
}
dirtyFlag |= 0x0001
相当于dirtyFlag = dirtyFlag | 0x0001
。运算符是按位或|
运算符。在您的情况下,它设置最低的二进制位。一些进一步的例子:
1 | 2 = 3 (0001 | 0010 = 0011)
2 | 4 = 6 (0010 | 0100 = 0110)
5 | 1 = 5 (0101 | 0001 = 0101)
| 是按位或运算符。它需要两个数值并逐位比较它们,如果其中任何一个位等于 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
它将对您的dirtyFlag执行按位或,与执行相同
dirtyFlag = dirtyFlag | 0x0001;
所以基本上它是一个简短的注释,代表 OR 等于。OR 之前的dirtyFlag 是 0x0000 并且它执行 OR 与 0x0001 因为你的两个值都被认为是十六进制值
0000
0001
----
0001
所以基本上它会将你的标志设置为1,这就是它所做的一切
或等于。此代码将设置 1 位。
它的意思是or equals
dirtyFlag = dirtyFlag | 0x0001;