OceanBase 数据库支持常用的位运算符。位运算使用 BIGINT UNSIGNED 计算,不需考虑符号位。
位运算符概览
OceanBase 数据库当前版本所支持的位运算符的详细信息如下表所示。
| 运算符 | 操作数类型 | 含义 |
|---|---|---|
& | 二元 | 按位与 |
| | 二元 | 按位或 |
~ | 一元 | 按位取反 |
^ | 二元 | 按位异或 |
<< | 二元 | 逻辑左移 |
>> | 二元 | 逻辑右移 |
说明
按位与 &
两个操作数的二进制位都为 1 时,结果才为 1。结果是一个无符号的 64 位整数。
示例如下:
obclient> SELECT 28 & 15;
+---------+
| 28 & 15 |
+---------+
| 12 |
+---------+
1 row in set
按位或 |
两个操作数的二进制位都为 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
按位异或 ^
两个操作数的二进制位相同为 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
逻辑左移 <<
两个操作数的二进制位全部左移若干位,高位丢弃,低位补 0。结果是一个无符号的 64 位整数。该值被截断为 64 位。如果移位计数大于或等于无符号 64 位数字的宽度,则结果为零。
如下示例为将 1 (00000001) 左移 2 位,右补 0,即得 4(00000100)。
obclient> SELECT 1 << 2;
+--------+
| 1 << 2 |
+--------+
| 4 |
+--------+
1 row in set
逻辑右移 >>
两个操作数的二进制位全部右移若干位。对无符号数,高位补 0。结果是一个无符号的 64 位整数。该值被截断为 64 位。如果移位计数大于或等于无符号 64 位数字的宽度,则结果为零。
如下示例为将 4(00000100)右移 2 位,左补 0,即得 1 (00000001)。
obclient> SELECT 4 >> 2;
+--------+
| 4 >> 2 |
+--------+
| 1 |
+--------+
1 row in set 「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




