4

このような(他の誰かの)コードを実行し続けます

Case
When (variable & (2|4|8|16)>0) Then ...
WHEN (variable & (1|32)>0 Then ...
...
End

ここで何が起こっているかは、変数の 2^1、2^2、2^3、または 2^4 の場所に 1 または 0 があるかどうかをテストしていることだと思いvariableます。これは正しいですか?いずれにせよ、この表現がこのように書かれている理由についてはまだ不明です。このロジックに関するドキュメントを見つけることができません。これは、実際に何と呼ぶべきかわからないためです。

4

1 に答える 1

3

その通りです。「パイプ」記号|はビットごとの OR 演算子に対応し、アンパサンド&はビットごとの AND 演算子に対応します (少なくとも一部のデータベースでは)。

これらのビット演算子を使用してビットをチェックしています。彼らがこれを行っている最も可能性の高い理由は、「読みやすさの向上」のためです。たとえば、書き込み時にどのビットがチェックされているかを簡単に確認できます

2|4|8|16 -- rather than 30
1|32     -- rather than 33
于 2012-08-21T15:25:39.263 に答える