OceanBaseデータベースは一般的なビット演算子をサポートしています。ビット演算はBIGINT UNSIGNEDで計算され、符号ビットを考慮する必要はありません。
ビット演算子の概要
OceanBaseデータベースの現行バージョンがサポートするビット演算子の詳細は、以下の表に示されています。
| 演算子 | 演算子の種類 | 意味 |
|---|---|---|
& |
二項 | ビット単位のAND |
| |
二項 | ビット単位のOR |
~ |
一項 | ビット単位のNOT |
^ |
二項 | ビット単位のXOR |
<< |
二項 | 論理左シフト |
>> |
二項 | 論理右シフト |
説明
比較演算子 &
2つのオペランドの2進数ビットがどちらも1の場合にのみ、結果は1となります。結果は符号なしの64ビット整数です。
例:
obclient> SELECT 28 & 15;
+---------+
| 28 & 15 |
+---------+
| 12 |
+---------+
1 row in set
比較演算子 |
2つのオペランドの2進数ビットがどちらも0の場合にのみ、結果は0となります。結果は符号なしの64ビット整数です。
例:
obclient> SELECT 28 | 15;
+---------+
| 28 | 15 |
+---------+
| 31 |
+---------+
1 row in set
比較演算子 ~
2進数ビット上で0は1に、1は0に変わります。結果は符号なしの64ビット整数です。
例:
obclient> SELECT 5 & ~1;
+--------+
| 5 & ~1 |
+--------+
| 4 |
+--------+
1 row in set
比較演算子 ^
2つのオペランドの2進数ビットが同じ場合は0、異なる場合は1となります。結果は符号なしの64ビット整数です。
例:
obclient> SELECT 1 ^ 1;
+-------+
| 1 ^ 1 |
+-------+
| 0 |
+-------+
1 row in set
obclient> SELECT 1 ^ 0;
+-------+
| 1 ^ 0 |
+-------+
| 1 |
+-------+
1 row in set
obclient> SELECT 13 ^ 5;
+--------+
| 13 ^ 5 |
+--------+
| 8 |
+--------+
1 row in set
比較演算子 <<
2つのオペランドの2進数ビットをすべて一定の数だけ左にシフトします。上位ビットは破棄され、下位ビットは0で補われます。結果は符号なしの64ビット整数です。この値は64ビットに切り捨てられます。シフトカウントが符号なし64ビット数の幅以上の場合、結果は0となります。
以下の例では、1 (00000001) を2ビット左にシフトし、右側に0を補うことで、4(00000100) を得ます。
obclient> SELECT 1 << 2;
+--------+
| 1 << 2 |
+--------+
| 4 |
+--------+
1 row in set
比較演算子 >>
2つのオペランドの2進数ビットをすべて一定の数だけ右にシフトします。符号なし数の場合、上位ビットは0で補われます。結果は符号なしの64ビット整数です。この値は64ビットに切り捨てられます。シフトカウントが符号なし64ビット数の幅以上の場合、結果は0となります。
以下の例では、4(00000100)を2ビット右にシフトし、左側に0を補うことで、1 (00000001) を得ます。
obclient> SELECT 4 >> 2;
+--------+
| 4 >> 2 |
+--------+
| 1 |
+--------+
1 row in set