位操作函数
位操作函数适用于UInt8,UInt16,UInt32,UInt64,Int8,Int16,Int32,Int64,Float32或Float64中的任何类型。
结果类型是一个整数,其位数等于其参数的最大位。如果至少有一个参数为有符数字,则结果为有符数字。如果参数是浮点数,则将其强制转换为Int64。
bitAnd(a, b)
bitOr(a, b)
bitXor(a, b)
bitNot(a)
bitShiftLeft(a, b)
将值的二进制表示向左移动指定数量的位。
FixedString
或 String
被视为单个多字节值。
FixedString
值的位在移出时会丢失。相反,String
值使用额外的字节进行扩展,因此不会丢失任何位。
语法
参数
a
— 要进行移位操作的值。类型可以为Integer types,String或者FixedString。b
— 移位的次数。类型为Unsigned integer types,允许使用64位数字及64位以下的数字类型。
返回值
- 移位后的值。
返回值的类型与输入值的类型相同。
示例
结果:
bitShiftRight(a, b)
将值的二进制表示向右移动指定数量的位。
FixedString
或String
被视为单个多字节值。请注意,String
值的长度会随着位的移出而减少。
语法
参数
a
— 需要进行位移的值。类型可以为Integer types,String或者FixedString。b
— 移位的次数。类型为Unsigned integer types,允许使用64位数字及64位以下的数字类型。
返回值
- 移位后的值。
返回值的类型与输入值的类型相同。
示例
查询语句:
结果:
bitRotateLeft(a, b)
bitRotateRight(a, b)
bitSlice(s, offset, length)
返回从offset
索引中的length
位长的位开始的子字符串,位索引从 1 开始。
语法
参数
s
— 类型可以是String或者FixedString。offset
— 带位的起始索引,正值表示左侧偏移,负值表示右侧缩进,位编号从 1 开始。length
— 带位的子串长度。如果您指定一个负值,该函数将返回一个开放子字符串 [offset, array_length - length]。如果省略该值,该函数将返回子字符串 [offset, the_end_string]。如果长度超过s,将被截断。如果长度不是8的倍数,则在右边填充0。
返回值
- 子字符串,类型为String。
示例
查询语句:
结果:
bitTest
取任意整数并将其转换为binary form,返回指定位置的位值。位值从右到左数,从0开始计数。
语法
参数
number
– 整数。index
– 要获取位值的位置。
返回值
返回指定位置的位值
类型为:UInt8
。
示例
例如,十进制数字 43 在二进制的表示是 101011。
查询语句:
结果:
另一个示例:
查询语句:
结果:
bitTestAll
返回给定位置所有位的 logical conjunction 进行与操作的结果。位值从右到左数,从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 在二进制的表示是 101011。
查询语句:
结果:
另一个例子:
查询语句:
结果:
bitTestAny
返回给定位置所有位的 logical disjunction 进行或操作的结果。位值从右到左数,从0开始计数。
或运算的结果:
0 OR 0 = 0
0 OR 1 = 1
1 OR 0 = 1
1 OR 1 = 1
语法
参数
number
– 整数。index1
,index2
,index3
,index4
– 位的位置。
返回值
返回逻辑或的结果。
类型为: UInt8
。
示例
例如,十进制数字 43 在二进制的表示是 101011。
查询语句:
结果:
另一个例子:
查询语句:
结果:
bitCount
计算数字的二进制表示中值为 1 的位数。
语法
参数
x
— 类型为Integer或floating-point数字。该函数使用内存中的值表示。它允许支持浮点数。
返回值
- 输入数字中值为 1 的位数。
该函数不会将输入值转换为更大的类型 (sign extension)。 因此,例如,bitCount(toUInt8(-1)) = 8
。
类型为: UInt8
。
示例
以十进制数字 333 为例,它的二进制表示为: 0000000101001101。
查询语句:
结果:
bitHammingDistance
返回两个整数值的位表示之间的 Hamming Distance。可与 SimHash 函数一起使用,用于检测半重复字符串。距离越小,这些字符串就越有可能相同。
语法
参数
返回值
- 汉明距离。
类型为: UInt8。
示例
查询语句:
结果:
使用SimHash函数:
结果: