2

オラクルの bitand 関数について混乱しています。2つのビットが設定されているかどうかを制御するために使用されることを私は知っています。しかし、設定されていることの意味は何ですか。いつ、なぜ使用されるのか。実際の例に基づいて例を挙げていただければ、とてもうれしいです。回答ありがとうございます。

4

1 に答える 1

6

バイナリでは、「セット」は「値が 1 である」ことを意味します。「未設定」は「値が 0 である」ことを意味します。

BITAND の Oracle ドキュメントから:

「結果はいくつかのステップで計算されます。最初に、各引数 A が値 SIGN(A)*FLOOR(ABS(A)) に置き換えられます。この変換には、各引数をゼロに向かって切り捨てる効果があります。次に、各引数 A (これは整数値である必要があります) は、n ビットの 2 の補数のバイナリ整数値に変換されます。2 つのビット値は、ビットごとの AND 演算を使用して結合されます。最後に、結果の n ビットの 2 の補数値が NUMBER に変換されます。"

簡単に言うと、この関数は引数を切り捨て、2 進数 (現在は 128 ビットに制限されています) に変換し、2 つの 2 進数の AND を取り、2 進数を NUMBER に変換した結果を返します。

0 と 1 のすべての可能な組み合わせの結果は次のとおりです。

SELECT BITAND(0, 0) AS "0, 0",  -- i.e. 0 AND 0 = 0
       BITAND(0, 1) AS "0, 1",  -- i.e. 0 AND 1 = 0
       BITAND(1, 0) AS "1, 0",  -- i.e. 1 AND 0 = 0
       BITAND(1, 1) AS "1, 1"   -- i.e. 1 AND 1 = 1
  FROM DUAL;

より複雑な例は、11 と 5 の AND 演算です。2 進数では、10 進数の 11 は "1011" になります。10進数の5が2進数の「0101」になります。次のように、これらの値を AND で結合すると、

1 0 1 1
0 1 0 1
-------
0 0 0 1

1 バイナリを取得しますが、これは 10 進数に戻すと 1 のままです。

共有してお楽しみください。

于 2012-05-16T11:38:11.677 に答える