1

ここでの「&」の意味:

select pt.TrTp, sum(pt.TrTp)
from ProdTr pt
where TransSt & 16 <> 16  // this is the row that i don´t understand..
group by pt.TrTp
4

5 に答える 5

7

これはビットマスクと呼ばれます。これは、数値自体を意味するだけの数値とは対照的に、数値の個々のビットが異なる意味を持つ状況で使用されます(たとえば、年齢をデータベースに保存する場合)。

2進形式の数値を想像し、その数値の特定のビットが設定されているかどうかをテストする場合は、次のように、数値とテストするビットを含む2進AND演算子を使用してテストします。

if (number & 16 == 16)

バイナリでは、これは次のことを意味します(あなたの数が25であると仮定します):

if (00011001 & 00010000 == 00010000)

ここで、ビット5(下から上に数えて)の桁が両方とも1であることがわかります。したがって、結果の数値はそのビットで1になります。他に1がないため、両方の数値がこの位置に1を持っている場合、結果の数値は正確に16になります。

追加したいのですが、通常、異なる意味を1つのデータベースフィールドにエンコードすることは悪い習慣です。インデックスを作成してインデックスで取得することは困難であり、DBMSによっては完全にインデックスが作成されていない場合もあります。

于 2013-03-08T08:54:59.437 に答える
1

これはビット単位ANDです。値のビット4が設定されていないかどうかをチェックするだけです。

この式を次のように書き直しますTransSt & 16 = 0

于 2013-03-08T08:49:59.830 に答える
0

それはビット単位のANDです。

&ビット演算子は、2つの式の間でビット単位の論理積を実行し、両方の式に対応する各ビットを取得します。結果のビットは、入力式の両方のビット(解決される現在のビット)の値が1の場合にのみ、1に設定されます。それ以外の場合、結果のビットは0に設定されます。

http://msdn.microsoft.com/en-us/library/ms174965.aspxから

この場合、フラグとともに使用され、複数の値が1つのフィールドに格納されてから、ビット単位のAND演算を使用して特定の状態をチェックします(この特定のケースでは、フィールドに指定された状態が含まれていないことを確認します)。

于 2013-03-08T08:49:15.543 に答える
0

それはビット単位のANDです。このMSDNの記事を参照してください。

于 2013-03-08T08:50:19.880 に答える
0

これはビット単位のAND演算子です。

ビット単位の演算は、個々のビットのレベルで1つ以上のビットパターンまたは2進数を操作します。これは、プロセッサによって直接サポートされる高速でプリミティブなアクションであり、比較や計算のために値を操作するために使用されます。単純な低コストのプロセッサでは、通常、ビット単位の演算は除算よりも大幅に高速で、乗算よりも数倍高速であり、加算よりも大幅に高速な場合があります。最近のプロセッサは、命令パイプラインやその他のアーキテクチャ設計の選択が長いため、通常、ビット単位の演算と同じ速度で加算と乗算を実行しますが、ビット単位の演算は、リソースの使用量が少ないため、通常、消費電力/パフォーマンスが低くなります。

http://en.wikipedia.org/wiki/Bitwise_operationから

于 2013-03-08T08:50:20.690 に答える