位运算函数
功能描述
位运算函数用于对整数类型进行按位操作。支持多个位运算函数和操作符,支持在SQL中直接进行位级别的数据处理。
函数/操作符列表
| 函数/操作符 | 描述 |
|---|---|
| expr1 & expr2 | 按位与运算。返回两个整数按位与的结果。 |
| expr1 | expr2 | 按位或运算。返回两个整数按位或的结果。 |
| expr1 ^ expr2 | 按位异或运算。返回两个整数按位异或的结果。 |
| ~ expr | 按位取反运算。返回整数按位取反的结果。 |
| base << exp | 按位左移操作符。等价于 shiftleft(base, exp)。 |
| base >> exp | 按位有符号右移操作符。等价于 shiftright(base, exp)。 |
| base >>> exp | 按位无符号右移操作符。等价于 shiftrightunsigned(base, exp)。 |
| shiftleft(base, shift) | 按位左移。 |
| shiftright(base, shift) | 按位右移(带符号)。 |
| shiftrightunsigned(base, shift) | 按位无符号右移。 |
| bit_count(expr) | 返回整数中1的位数(即汉明重量/人口计数)。 |
| bit_get(expr, pos) | 返回整数指定位置上的位值(0或1)。位置从右往左编号,从0开始。 |
| getbit(expr, pos) | bit_get的别名。返回整数指定位置上的位值。 |
示例
按位与运算(&)
SELECT 3 & 5; -- 1(二进制:011 & 101 = 001)
按位或运算(|)
SELECT 3 | 5; -- 7(二进制:011 | 101 = 111)
按位异或运算(^)
SELECT 3 ^ 5; -- 6(二进制:011 ^ 101 = 110)
按位取反(~)
SELECT ~ 0; -- -1
按位左移(<< / shiftleft)
SELECT 2 << 1; -- 4 SELECT shiftleft(2, 1); -- 4
按位有符号右移(>> / shiftright)
SELECT 4 >> 1; -- 2 SELECT shiftright(4, 1); -- 2
按位无符号右移(>>> / shiftrightunsigned)
SELECT 4 >>> 1; -- 2 SELECT shiftrightunsigned(4, 1); -- 2
bit_count — 统计1的位数
SELECT bit_count(0); -- 0 SELECT bit_count(7); -- 3(二进制:111,有3个1) SELECT bit_count(8); -- 1(二进制:1000,有1个1)
bit_get / getbit — 获取指定位的值
SELECT bit_get(11, 0); -- 1(11的二进制为1011,第0位为1) SELECT bit_get(11, 2); -- 0(11的二进制为1011,第2位为0) SELECT getbit(11, 0); -- 1
注意事项
- 位运算函数仅适用于整数类型(TINYINT、SMALLINT、INT、BIGINT)。
- <<、>>、>>> 操作符与 shiftleft、shiftright、shiftrightunsigned 函数等价。
- bit_get/getbit 的位置参数从0开始,从最低有效位(最右侧)计数。位置参数不能为负数。