bit_shift_right_logical
功能
将一个数值或者数值表达式的二进制表示向右移动指定的位数。该函数执行逻辑右移。
逻辑右移时,最低位丢弃,无论原始数值是正数还是负数均在最高位补 0,bit 长度不变。逻辑位移都是无符号位移。举例,10101
逻辑右移一位的结果是 00101
.
bit_shift_right() 和 bit_shift_right_logical() 函数对于正数会返回相同结果。
语法
bit_shift_right_logical(value, shift)
参数说明
value
: 要进行位移的数值或数值表达式。支持如下数据类型:TINYINT、SMALLINT、INT、BIGINT、LARGEINT。
shift
: 要移动的位数,BIGINT 类型。
返回值说明
返回值的数据类型和 value
一致。
使用说明
- 如果任何一个输入参数为 NULL,则返回 NULL。
- 如果
shift
小于 0,则返回 0。 - 对于任意
value
值,如果shift
等于 0,则返回原本的value
值。 - 如果
value
等于 0,则固定返回 0。 - 如果
value
为非整型的数值,会转换为整数进行运算。参见示例。 - 如果
value
为 STRING 类型,会转换为整数进行运算。如果 STRING 无法转换为整数,则作为 NULL 处理。参见示例。
示例
执行逻辑右移。
SELECT bit_shift_right_logical(2, 1);
+-------------------------------+
| bit_shift_right_logical(2, 1) |
+-------------------------------+
| 1 |
+-------------------------------+
SELECT bit_shift_right_logical(2.2, 1);
+---------------------------------+
| bit_shift_right_logical(2.2, 1) |
+---------------------------------+
| 1 |
+---------------------------------+
SELECT bit_shift_right_logical("2", 1);
+---------------------------------+
| bit_shift_right_logical('2', 1) |
+---------------------------------+
| 1 |
+---------------------------------+
SELECT bit_shift_right_logical(cast('-2' AS INTEGER(32)), 1);
+-----------------------------------------------+
| bit_shift_right_logical(CAST('-2' AS INT), 1) |
+-----------------------------------------------+
| 2147483647 |
+-----------------------------------------------+