1

このコードで何が起こっているのかわかりません:

if ((_value & item.Value) == item.Value)
{
   item.IsSet = true;
}

私が見ているこの特定の例では、次のように見えます。

_valueが4103であるitem.Valueが0の場合、それはtrueです。

_valueが4103であるが1の場合item.Value、それは本当です。

_valueが4103であるが2の場合item.Value、それは本当です。

_valueが4103であるが4の場合item.Value、それは本当です。

_valueが4103であるitem.Valueが8の場合、それは正しくありません。

_valueが4103であるitem.Valueが16である場合、それは正しくありません。

_valueが4103であるitem.Valueが256である場合、それは正しくありません。

_valueが4103であるitem.Valueが512である場合、それは正しくありません。

_valueが4103であるitem.Valueが1024である場合、それは正しくありません。

_valueが4103であるitem.Valueが2048である場合、それは正しくありません。

_valueが4103であるitem.Valueが4096の場合、それはtrueです。

別の例では、次のように表示されます。

_valueが51であるitem.Valueが0の場合、それは真です。

_valueが51であるが1の場合item.Value、それは本当です。

_valueが51で2の場合item.Value、それは本当です。

_valueが51で4の場合item.Value、それは正しくありません。

_valueが51で8の場合item.Value、それは正しくありません。

_valueが51item.Valueで16の場合、それは本当です。

_valueが51item.Valueで32の場合、それは本当です。

誰かが私にそれを説明してもらえますか?

4

4 に答える 4

4

2進数で数値を書き直し、ゼロの場合をスキップしましょう。

if _value is 00110011 and item.Value is 00000001, it's true.
if _value is 00110011 and item.Value is 00000010, it's true.
if _value is 00110011 and item.Value is 00000100, it's false.
if _value is 00110011 and item.Value is 00001000, it's false.
if _value is 00110011 and item.Value is 00010000, it's true.
if _value is 00110011 and item.Value is 00100000, it's true.
if _value is 00110011 and item.Value is 01000000, it's false.
if _value is 00110011 and item.Value is 10000000, it's false.

パターンが見えますか?真は対応するビットが1であるところであり、偽はそれが0であるところです。

于 2013-02-27T17:35:42.333 に答える
4

ビット単位のANDなので、例から:

(_value & item.Value) == item.Value

_value = 4103 = 1000000000111 binary
_item.Value = 0  = 0 binary

  1000000000111
& 0000000000000
---------------
  0000000000000

_value = 4103 = 1000000000111 binary
_item.Value = 4096  = 1000000000000 binary

  1000000000111
& 1000000000000
---------------
  1000000000000
于 2013-02-27T17:29:00.480 に答える
0

MSDNから;

演算子は、単項演算子または二項&演算子として機能できます。

integralタイプの場合、そのオペランドのを&計算します。bitwise AND

boolオペランドの場合、そのオペランドのを計算&logical ANDます。つまり、結果は、trueその両方のオペランドがである場合に限りますtrue

したがって、を書く4103と、実際にはバイナリと同じになります1000000000111。このような整数値のバイナリ表現を見つけることができます。

int i = 4103;
Console.WriteLine (Convert.ToString(i, 2)); // 1000000000111

その残りの状況のプロセスは、真理値表を使用した単純な計算です。

  INPUT         OUTPUT
 A   B          A ∧ B
 T   T          T
 T   F          F
 F   T          F
 F   F          F
于 2013-02-27T17:30:41.033 に答える
0

これはビット単位のAND演算子です。基本的に、整数XとYのビットごとのANDを実行し、その結果をYと比較すると、Xのすべてのビットが1に設定され、Yも1に設定されていることを確認します。Xには他のビットも1に設定されている場合がありますが、私たちが気にしないもの。オペレーターに関するMSDNの記事は次のとおりです。

http://msdn.microsoft.com/en-us/library/sbf85k1c(v=vs.71).aspx

于 2013-02-27T17:31:13.810 に答える