更新时间:2026-07-03 GMT+08:00
分享

位运算函数

功能描述

位运算函数用于对整数类型进行按位操作。支持多个位运算函数和操作符,支持在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开始,从最低有效位(最右侧)计数。位置参数不能为负数。

相关文档