OceanBaseデータベースは、一般的なビット演算子をサポートしています。ビット演算は BIGINT UNSIGNED 型で実行され、符号ビットを考慮する必要はありません。
ビット演算子の概要
OceanBaseデータベースの現在のバージョンでサポートされているビット演算子の詳細は、次の表のとおりです。
演算子 |
演算子の種類 |
意味 |
|---|---|---|
& |
二項 | 比較的論理積 |
| |
二項 | 比較的論理和 |
~ |
一項 | 比較的論理反転 |
^ |
二項 | 比較的論理排他和 |
<< |
二項 | 論理左シフト |
>> |
二項 | 論理右シフト |
説明
比較演算子 &
2つのオペランドのビットがどちらも1の場合にのみ、結果は1になります。結果は符号なしの64ビット整数です。
例:
obclient> SELECT 28 & 15;
+---------+
| 28 & 15 |
+---------+
| 12 |
+---------+
1 row in set
比較演算子 |
2つのオペランドのビットがどちらも0の場合にのみ、結果は0になります。結果は符号なしの64ビット整数です。
例:
obclient> SELECT 28 | 15;
+---------+
| 28 | 15 |
+---------+
| 31 |
+---------+
1 row in set
比較演算子 ~
ビットが0の場合は1に、1の場合は0に変換されます。結果は符号なしの64ビット整数です。
例:
obclient> SELECT 5 & ~1;
+--------+
| 5 & ~1 |
+--------+
| 4 |
+--------+
1 row in set
比較演算子 ^
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つのオペランドのビットをすべて所定の数だけ左にシフトします。上位ビットは破棄され、下位ビットは0で補完されます。結果は符号なしの64ビット整数です。この値は64ビットで切り捨てられます。シフト回数が符号なし64ビット数の幅以上の場合、結果は0になります。
以下の例では、1 (00000001) を2ビット左シフトし、右側に0を補完することで、4 (00000100) を得ます。
obclient> SELECT 1 << 2;
+--------+
| 1 << 2 |
+--------+
| 4 |
+--------+
1 row in set
論理右シフト演算子 >>
2つのオペランドのビットをすべて所定の数だけ右にシフトします。符号なし数の場合、上位ビットは0で補完されます。結果は符号なしの64ビット整数です。この値は64ビットで切り捨てられます。シフト回数が符号なし64ビット数の幅以上の場合、結果は0になります。
以下の例では、4 (00000100) を2ビット右シフトし、左側に0を補完することで、1 (00000001) を得ます。
obclient> SELECT 4 >> 2;
+--------+
| 4 >> 2 |
+--------+
| 1 |
+--------+
1 row in set