Перейти к основному содержимому
Перейти к основному содержимому

Битовые функции

Битовые функции работают с любой парой типов из 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 продлевается дополнительными байтами, поэтому никакие биты не теряются.

Синтаксис

Аргументы

Возвращаемое значение

  • Сдвинутое значение.

Тип возвращаемого значения такой же, как тип входного значения.

Пример

В следующих запросах используются функции bin и hex для отображения битов сдвинутых значений.

Результат:

bitShiftRight(a, b)

Сдвигает бинарное представление значения вправо на заданное количество битовых позиций.

FixedString или String рассматриваются как одно многобайтовое значение. Обратите внимание, что длина значения String уменьшается по мере сдвига битов.

Синтаксис

Аргументы

Возвращаемое значение

  • Сдвинутое значение.

Тип возвращаемого значения такой же, как тип входного значения.

Пример

Запрос:

Результат:

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]. Если длина превышает s, она будет обрезана. Если длина не является кратной 8, будет добавлено 0 справа.

Возвращаемое значение

Пример

Запрос:

Результат:

byteSlice(s, offset, length)

См. функцию substring.

bitTest

Принимает любое целое число и преобразует его в двойную систему счисления, возвращает значение бита на заданной позиции. Нумерация производится справа налево, начиная с 0.

Синтаксис

Аргументы

  • number – Целое число.
  • index – Позиция бита.

Возвращаемое значение

  • Значение бита на указанной позиции. UInt8.

Пример

Например, число 43 в двоичной системе (бинарной) представляется как 101011.

Запрос:

Результат:

Другой пример:

Запрос:

Результат:

bitTestAll

Возвращает результат логического соединения (логическая операция И) всех битов на заданных позициях. Нумерация производится справа налево, начиная с 0.

Существуют следующие правила для побитовых операций:

0 И 0 = 0

0 И 1 = 0

1 И 0 = 0

1 И 1 = 1

Синтаксис

Аргументы

  • number – Целое число.
  • index1, index2, index3, index4 – Позиции битов. Например, для набора позиций (index1, index2, index3, index4) результат будет истинным только в том случае, если все его позиции истинны (index1index2, ⋀ index3index4).

Возвращаемое значение

  • Результат логического conjunction. UInt8.

Пример

Например, число 43 в двоичной системе (бинарной) представляется как 101011.

Запрос:

Результат:

Другой пример:

Запрос:

Результат:

bitTestAny

Возвращает результат логического сложения (логическая операция ИЛИ) всех битов на заданных позициях. Нумерация производится справа налево, начиная с 0.

Существуют следующие правила для побитовых операций:

0 ИЛИ 0 = 0

0 ИЛИ 1 = 1

1 ИЛИ 0 = 1

1 ИЛИ 1 = 1

Синтаксис

Аргументы

  • number – Целое число.
  • index1, index2, index3, index4 – Позиции битов.

Возвращаемое значение

  • Результат логического сложения. UInt8.

Пример

Например, число 43 в двоичной системе (бинарной) представляется как 101011.

Запрос:

Результат:

Другой пример:

Запрос:

Результат:

bitCount

Подсчитывает количество бит, установленных в единицу в бинарном представлении числа.

Синтаксис

Аргументы

Возвращаемое значение

  • Количество бит, установленных в единицу в входном числе. UInt8.
примечание

Функция не преобразует входное значение в более крупный тип (сохранение знака). Поэтому, например, bitCount(toUInt8(-1)) = 8.

Пример

Например, число 333. Его бинарное представление: 0000000101001101.

Запрос:

Результат:

bitHammingDistance

Возвращает расстояние Хэмминга между битовыми представлениями двух целых значений. Может быть использовано с функциями SimHash для обнаружения полудубликатов строк. Чем меньше расстояние, тем более вероятно, что эти строки одинаковые.

Синтаксис

Аргументы

  • int1 — Первое целое значение. Int64.
  • int2 — Второе целое значение. Int64.

Возвращаемое значение

  • Расстояние Хэмминга. UInt8.

Примеры

Запрос:

Результат:

С функцией SimHash:

Результат: