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です。演算子はビットごとの|OR 演算子です。あなたの場合、それは最下位のバイナリビットを設定します。さらにいくつかの例:

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

これは、 や など、非常に多くの演算子で同じ+=です/=

などのビット単位の演算子を理解したい場合は|ビット単位の操作と使用法をご覧ください。

于 2012-10-12T22:49:20.000 に答える
2

| | ビットごとの 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
于 2012-10-12T22:55:19.683 に答える
1

これは、dirtyFlag に対してビット単位のORを実行します。実行するのと同じです。

dirtyFlag = dirtyFlag | 0x0001;

したがって、基本的には OR equals を表す短い注釈です。ORの前のdirtyFlagは0x0000であり、両方の値が16進値と見なされるため、0x0001でORを実行します

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 に答える