&はビット単位の論理演算子です-2つの整数値に対して演算を実行します。
WHERE (sc.Attributes & 1) = 0
上記のコードは、sc.Attributesが偶数かどうかを確認します。これは、最初のビットが設定されていないということと同じです。
ただし、列の名前が「属性」であるため、「1」の値は、外部的な意味を持つ単なるフラグである可能性があります。
属性の番号に格納されているフラグごとに1桁の2進数を使用するのが一般的です。したがって、最初のビットをテストするにはsc.Attributes&1を使用し、2番目のビットをテストするにはsc.Attributes&2を使用し、3番目のビットをテストするにはsc.Attributes&4を使用し、4番目のビットをテストするにはsc.Attributes&8を使用します...
=0の部分は、最初のビットが設定されていないかどうかをテストしています。
いくつかのバイナリの例:(==操作の結果を表示するため)
//Check if the first bit is set, same as sc.Attributes&1
11111111 & 00000001 == 1
11111110 & 00000001 == 0
00000001 & 00000001 == 1
//Check if the third bit is set, same as sc.Attributes&4
11111111 & 00000100 == 1
11111011 & 00000100 == 0
00000100 & 00000100 == 1