位函数
位函数适用于 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 在二进制(基数 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
),当且仅当所有位置都为真时,该条件为真(index1
⋀index2
⋀index3
⋀index4
)。
返回值
- 逻辑合取的结果。UInt8。
示例
例如,数字 43 在二进制(基数 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 在二进制(基数 2)系统中是 101011。
查询:
结果:
另一个示例:
查询:
结果:
bitCount
计算数字的二进制表示中设置为 1 的位的数量。
语法
参数
返回值
- 输入数字中设置为 1 的位的数量。UInt8。
该函数不会将输入值转换为更大的类型(符号扩展)。例如,bitCount(toUInt8(-1)) = 8
。
示例
例如,数字 333。它的二进制表示:0000000101001101。
查询:
结果:
bitHammingDistance
返回两个整数值的位表示之间的 汉明距离。可以与 SimHash 函数一起使用,以检测半重复的字符串。距离越小,说明这些字符串越可能相同。
语法
参数
返回值
- 汉明距离。UInt8。
示例
查询:
结果:
与 SimHash 一起使用:
结果: