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

位运算函数

位运算函数适用于 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 在二进制(base-2)数值系统中的表示为 101011。

查询:

结果:

另一个示例:

查询:

结果:

bitTestAll

返回给定位置所有位的 逻辑与(AND 运算符)的结果。计数从右到左,从 0 开始。

位运算的与:

0 AND 0 = 0

0 AND 1 = 0

1 AND 0 = 0

1 AND 1 = 1

语法

参数

  • number – 整数。
  • index1index2index3index4 – 位的位置。例如,对于位置集合(index1index2index3index4),只有当所有位置为 true 时才为 true(index1index2index3index4)。

返回值

  • 逻辑与的结果。 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 – 整数。
  • index1index2index3index4 – 位的位置。

返回值

  • 逻辑或的结果。 UInt8

示例

例如,数字 43 在二进制(base-2)数值系统中的表示为 101011。

查询:

结果:

另一个示例:

查询:

结果:

bitCount

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

语法

参数

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

返回值

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

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

示例

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

查询:

结果:

bitHammingDistance

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

语法

参数

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

返回值

  • 汉明距离。 UInt8

示例

查询:

结果:

SimHash 结合使用:

结果: