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

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

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

Синтаксис

Аргументы

  • ss это String или FixedString.
  • offset — Начальный индекс бита. Позитивное значение указывает на смещение влево, а негативное значение — на смещение вправо. Нумерация битов начинается с 1.
  • length — Длина подстроки с битами. Если вы укажете отрицательное значение, функция вернет открытую подстроку [offset, array_length - length]. Если вы опустите значение, функция вернет подстроку [offset, the_end_string]. Если length превышает s, она будет обрезана. Если длина не является кратной 8, на правой стороне будут добавлены 0.

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

Пример

Запрос:

Результат:

byteSlice(s, offset, length)

Смотрите функцию substring.

bitTest

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

Синтаксис

Аргументы

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

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

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

Пример

Например, число 43 в двоичной системе счисления равно 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) истина, если и только если все из его позиций истинны (index1index2, ⋀ index3index4).

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

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

Пример

Например, число 43 в двоичной системе счисления равно 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 в двоичной системе счисления равно 101011.

Запрос:

Результат:

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

Запрос:

Результат:

bitCount

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

Синтаксис

Аргументы

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

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

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

Пример

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

Запрос:

Результат:

bitHammingDistance

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

Синтаксис

Аргументы

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

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

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

Примеры

Запрос:

Результат:

С SimHash:

Результат: