跳到主要内容

位运算符

seekdb 支持常用的位运算符。位运算使用 BIGINT UNSIGNED 计算,不需考虑符号位。

位运算符概览

seekdb 当前版本所支持的位运算符的详细信息如下表所示。

运算符操作数类型含义
&二元按位与
``二元
~一元按位取反
^二元按位异或
<<二元逻辑左移
>>二元逻辑右移

说明

按位与 &

两个操作数的二进制位都为 1 时,结果才为 1。结果是一个无符号的 64 位整数。

示例如下:

SELECT 28 & 15;
+---------+
| 28 & 15 |
+---------+
| 12 |
+---------+
1 row in set (0.001 sec)

按位或 |

两个操作数的二进制位都为 0 时,结果才为 0。结果是一个无符号的 64 位整数。

示例如下:

SELECT 28 | 15;
+---------+
| 28 | 15 |
+---------+
| 31 |
+---------+
1 row in set (0.001 sec)

按位取反 ~

二进制位上 0 变为 1,1 变为 0。结果是一个无符号的 64 位整数。

示例如下:

SELECT 5 & ~1;
+--------+
| 5 & ~1 |
+--------+
| 4 |
+--------+
1 row in set (0.001 sec)

按位异或 ^

两个操作数的二进制位相同为 0,相异为 1。结果是一个无符号的 64 位整数。

示例如下:

SELECT 1 ^ 1;
+-------+
| 1 ^ 1 |
+-------+
| 0 |
+-------+
1 row in set (0.001 sec)

SELECT 1 ^ 0;
+-------+
| 1 ^ 0 |
+-------+
| 1 |
+-------+
1 row in set (0.000 sec)

SELECT 13 ^ 5;
+--------+
| 13 ^ 5 |
+--------+
| 8 |
+--------+
1 row in set (0.000 sec)

逻辑左移 <<

两个操作数的二进制位全部左移若干位,高位丢弃,低位补 0。结果是一个无符号的 64 位整数。该值被截断为 64 位。如果移位计数大于或等于无符号 64 位数字的宽度,则结果为零。

如下示例为将 1 (00000001) 左移 2 位,右补 0,即得 4(00000100)。

SELECT 1 << 2;
+--------+
| 1 << 2 |
+--------+
| 4 |
+--------+
1 row in set (0.001 sec)

逻辑右移 >>

两个操作数的二进制位全部右移若干位。对无符号数,高位补 0。结果是一个无符号的 64 位整数。该值被截断为 64 位。如果移位计数大于或等于无符号 64 位数字的宽度,则结果为零。

如下示例为将 4(00000100)右移 2 位,左补 0,即得 1 (00000001)。

SELECT 4 >> 2;
+--------+
| 4 >> 2 |
+--------+
| 1 |
+--------+
1 row in set (0.001 sec)