位运算符
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)