跳到主要内容
跳到主要内容

位函数

位函数适用于 UInt8UInt16UInt32UInt64Int8Int16Int32Int64Float32Float64 中的任何一对类型。某些函数支持 StringFixedString 类型。

结果类型是一个整数,其位等于参数的最大位数。如果至少有一个参数是有符号的,则结果为有符号数。如果参数是浮点数,则会转换为 Int64。

bitAnd(a, b)

bitOr(a, b)

bitXor(a, b)

bitNot(a)

bitShiftLeft(a, b)

将一个值的二进制表示向左移动指定的位数。

FixedStringString 被视为单个多字节值。

FixedString 值的位在向外移动时会丢失。相反,String 值会用额外的字节扩展,因此不会丢失位。

语法

参数

返回值

  • 移动后的值。

返回值的类型与输入值的类型相同。

示例

在以下查询中,使用了 binhex 函数来显示移动后的值的位。

结果:

bitShiftRight(a, b)

将一个值的二进制表示向右移动指定的位数。

FixedStringString 被视为单个多字节值。请注意,String 值的长度在位被移出时会减少。

语法

参数

返回值

  • 移动后的值。

返回值的类型与输入值的类型相同。

示例

查询:

结果:

bitRotateLeft(a, b)

bitRotateRight(a, b)

bitSlice(s, offset, length)

返回从 'offset' 索引开始的子字符串,长度为 'length' 位。位的索引从 1 开始。

语法

参数

  • s — s 是 StringFixedString
  • offset — 起始位的索引,正值表示在左侧的偏移,负值表示在右侧的缩进。位的编号从 1 开始。
  • length — 子字符串的位长。如果指定了负值,函数将返回一个开放子字符串 [offset, array_length - length]。如果省略该值,函数将返回子字符串 [offset, the_end_string]。如果 length 超过 s,将被截断。如果 length 不是 8 的倍数,则在右侧填充 0。

返回值

示例

查询:

结果:

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 – 整数。
  • index1index2index3index4 – 位的位置。例如,对于位置集(index1index2index3index4),当且仅当所有位置都为真时,该条件为真(index1index2index3index4)。

返回值

  • 逻辑合取的结果。UInt8

示例

例如,数字 43 在二进制(基数 2)系统中是 101011。

查询:

结果:

另一个示例:

查询:

结果:

bitTestAny

返回给定位置所有位的 逻辑析取(OR 操作符)的结果。计数是从右到左,从 0 开始。

位运算的析取:

0 OR 0 = 0

0 OR 1 = 1

1 OR 0 = 1

1 OR 1 = 1

语法

参数

  • number – 整数。
  • index1index2index3index4 – 位的位置。

返回值

  • 逻辑析取的结果。UInt8

示例

例如,数字 43 在二进制(基数 2)系统中是 101011。

查询:

结果:

另一个示例:

查询:

结果:

bitCount

计算数字的二进制表示中设置为 1 的位的数量。

语法

参数

  • x整数浮点 数字。该函数使用内存中的值表示。它允许支持浮点数。

返回值

  • 输入数字中设置为 1 的位的数量。UInt8
备注

该函数不会将输入值转换为更大的类型(符号扩展)。例如,bitCount(toUInt8(-1)) = 8

示例

例如,数字 333。它的二进制表示:0000000101001101。

查询:

结果:

bitHammingDistance

返回两个整数值的位表示之间的 汉明距离。可以与 SimHash 函数一起使用,以检测半重复的字符串。距离越小,说明这些字符串越可能相同。

语法

参数

  • int1 — 第一个整数值。Int64
  • int2 — 第二个整数值。Int64

返回值

  • 汉明距离。UInt8

示例

查询:

结果:

SimHash 一起使用:

结果: