#位运算符
YashanDB提供如下位运算符:
运算符 | 操作数 | 含义 | NULL参与运算 |
---|---|---|---|
& | 二元 | 按位与:1 & 1 = 1 其他为0 | 结果为NULL |
| | 二元 | 按位或:0 | 0 = 0 其他为1 | 结果为NULL |
^ | 二元 | 按位异或:0 ^ 0 = 0 或 1 ^ 1 = 0 其他为1 | 结果为NULL |
YashanDB中,可实现位运算的方式有:
- 位运算符:&、|、^
- 内置函数:BITAND BITOR BITXOR
其中,&与BITAND同义,|与BITOR同义,^与BITXOR同义。
参与运算的两个数据,按二进制展开后,由低到高每bit进行位运算,并以BIGINT类型输出运算结果。
位运算最多支持到64位。
小数参与运算:FLOOR取整后,参与位运算。
# 运算优先级
从高到低的运算优先级为:^>&>|。
可以使用双括号()来调整想达到的运算优先级。
# 数据类型
如下数据类型可能会参与到位运算中:
- 数值型(除FLOAT、DOUBLE外)
- 字符型
在进行二元位运算时,YashanDB将通过隐式数据转换,将参与运算的数据类型全部统一到BIGINT类型,再进行位运算。
下图列示具体统一规则:(行列标题格为参与位运算的数据类型;内容单元格为统一后的数据类型;–表示不支持两种数据类型参与位运算)
数据类型 | TINYINT | SMALLINT | INT | BIGINT | NUMBER | 字符型 | BIT |
---|---|---|---|---|---|---|---|
TINYINT | BIGINT | BIGINT | BIGINT | BIGINT | BIGINT | BIGINT | BIGINT |
SMALLINT | BIGINT | BIGINT | BIGINT | BIGINT | BIGINT | BIGINT | BIGINT |
INT | BIGINT | BIGINT | BIGINT | BIGINT | BIGINT | BIGINT | BIGINT |
BIGINT | BIGINT | BIGINT | BIGINT | BIGINT | BIGINT | BIGINT | BIGINT |
NUMBER | BIGINT | BIGINT | BIGINT | BIGINT | BIGINT | BIGINT | BIGINT |
字符型 | BIGINT | BIGINT | BIGINT | BIGINT | BIGINT | BIGINT | BIGINT |
BIT | BIGINT | BIGINT | BIGINT | BIGINT | BIGINT | BIGINT | BIGINT |