重複の可能性:
c# (csharp) で |= (単一のパイプが等しい) と &=(単一のアンパサンドが等しい) の意味
これが使用されているコンテキストは次のとおりです。
long dirtyFlag = 0x0000;
if (erd.SupervisorCompType != orgErd.SupervisorCompType) // change has been made?
{
dirtyFlag |= 0x0001;
// etc...
}
重複の可能性:
c# (csharp) で |= (単一のパイプが等しい) と &=(単一のアンパサンドが等しい) の意味
これが使用されているコンテキストは次のとおりです。
long dirtyFlag = 0x0000;
if (erd.SupervisorCompType != orgErd.SupervisorCompType) // change has been made?
{
dirtyFlag |= 0x0001;
// etc...
}
dirtyFlag |= 0x0001
と同等dirtyFlag = dirtyFlag | 0x0001
です。演算子はビットごとの|
OR 演算子です。あなたの場合、それは最下位のバイナリビットを設定します。さらにいくつかの例:
1 | 2 = 3 (0001 | 0010 = 0011)
2 | 4 = 6 (0010 | 0100 = 0110)
5 | 1 = 5 (0101 | 0001 = 0101)
| | ビットごとの OR 演算子です。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 変数は、どのフィールドが編集されたかを追跡しています。
比較されている一連の値があると思います。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 に対してビット単位のORを実行します。実行するのと同じです。
dirtyFlag = dirtyFlag | 0x0001;
したがって、基本的には OR equals を表す短い注釈です。ORの前のdirtyFlagは0x0000であり、両方の値が16進値と見なされるため、0x0001でORを実行します
0000
0001
----
0001
基本的に、フラグを1に設定します。それだけです
または等しい。このコードは 1 ビットを設定します。
その意味はor equals
dirtyFlag = dirtyFlag | 0x0001;