位运算函数
位运算函数适用于 UInt8
、UInt16
、UInt32
、UInt64
、Int8
、Int16
、Int32
、Int64
、Float32
或 Float64
的任意一对类型。有些函数支持 String
和 FixedString
类型。
返回类型为一个整数,位数与其参数的最大位数相等。如果至少有一个参数是有符号的,结果就是一个有符号数。如果参数是浮点数,它会被转换为 Int64。
bitAnd(a, b)
bitOr(a, b)
bitXor(a, b)
bitNot(a)
bitShiftLeft(a, b)
将值的二进制表示向左移动指定的位数。
FixedString
或 String
被视为单个多字节值。
当 FixedString
值的位移出界时,这部分位会丢失。相反,String
值会以额外字节扩展,因此不会丢失任何位。
语法
参数
a
— 要移位的值。可以是 整数类型、String 或 FixedString。b
— 移位的位置数。允许使用 无符号整数类型、64位类型或更小的类型。
返回值
- 移位后的值。
返回值的类型与输入值的类型相同。
示例
在以下查询中,使用 bin 和 hex 函数显示移位值的位。
结果:
bitShiftRight(a, b)
将值的二进制表示向右移动指定的位数。
FixedString
或 String
被视为单个多字节值。请注意,当位向右移出时,String
值的长度会减少。
语法
参数
a
— 要移位的值。可以是 整数类型、String 或 FixedString。b
— 移位的位置数。允许使用 无符号整数类型、64位类型或更小的类型。
返回值
- 移位后的值。
返回值的类型与输入值的类型相同。
示例
查询:
结果:
bitRotateLeft(a, b)
bitRotateRight(a, b)
bitSlice(s, offset, length)
从 'offset' 索引开始返回一个子字符串,长度为 'length' 位。位索引从 1 开始。
语法
参数
s
— s 为 String 或 FixedString。offset
— 起始位的索引,正值表示左侧偏移,负值表示右侧缩进。位编号从 1 开始。length
— 子字符串的位长度。如果指定负值,函数返回开放子字符串 [offset, array_length - length]。如果省略该值,函数返回子字符串 [offset, the_end_string]。如果 length 超过 s,它将被截断。如果 length 不是 8 的倍数,将在右侧填充 0。
返回值
- 子字符串。 String
示例
查询:
结果:
byteSlice(s, offset, length)
请参见函数 substring。
bitTest
获取任何整数并将其转换为 二进制形式,返回指定位置的位值。计数从右到左,从 0 开始。
语法
参数
number
– 整数。index
– 位的位置。
返回值
- 指定位置的位值。 UInt8。
示例
例如,数字 43 在二进制(base-2)数值系统中的表示为 101011。
查询:
结果:
另一个示例:
查询:
结果:
bitTestAll
返回给定位置所有位的 逻辑与(AND 运算符)的结果。计数从右到左,从 0 开始。
位运算的与:
0 AND 0 = 0
0 AND 1 = 0
1 AND 0 = 0
1 AND 1 = 1
语法
参数
number
– 整数。index1
、index2
、index3
、index4
– 位的位置。例如,对于位置集合(index1
、index2
、index3
、index4
),只有当所有位置为 true 时才为 true(index1
⋀index2
⋀index3
⋀index4
)。
返回值
- 逻辑与的结果。 UInt8。
示例
例如,数字 43 在二进制(base-2)数值系统中的表示为 101011。
查询:
结果:
另一个示例:
查询:
结果:
bitTestAny
返回给定位置所有位的 逻辑或(OR 运算符)的结果。计数从右到左,从 0 开始。
位运算的或:
0 OR 0 = 0
0 OR 1 = 1
1 OR 0 = 1
1 OR 1 = 1
语法
参数
number
– 整数。index1
、index2
、index3
、index4
– 位的位置。
返回值
- 逻辑或的结果。 UInt8。
示例
例如,数字 43 在二进制(base-2)数值系统中的表示为 101011。
查询:
结果:
另一个示例:
查询:
结果:
bitCount
计算数字的二进制表示中设置为 1 的位数。
语法
参数
返回值
- 输入数字中设置为 1 的位数。 UInt8。
该函数不会将输入值转换为更大的类型(符号扩展)。所以例如,bitCount(toUInt8(-1)) = 8
。
示例
例如,数字 333 的二进制表示为:0000000101001101。
查询:
结果:
bitHammingDistance
返回两个整数值的比特表示间的 汉明距离。可以与 SimHash 函数一起使用以检测半重复字符串。距离越小,这些字符串越可能相同。
语法
参数
返回值
- 汉明距离。 UInt8。
示例
查询:
结果:
与 SimHash 结合使用:
结果: