Битовые функции
Битовые функции работают с любыми парами типов из 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
дополняется дополнительными байтами, поэтому никакие биты не теряются.
Синтаксис
Аргументы
a
— Значение для сдвига. Целочисленные типы, String или FixedString.b
— Количество позиций сдвига. Разрешены Беззнаковые целочисленные типы, типы размером 64 бита или меньше.
Возвращаемое значение
- Сдвинутое значение.
Тип возвращаемого значения такой же, как тип входного значения.
Пример
В следующих запросах используются функции bin и hex для отображения битов сдвинутых значений.
Результат:
bitShiftRight(a, b)
Сдвигает бинарное представление значения вправо на заданное количество битов.
FixedString
или String
рассматриваются как одно многобайтовое значение. Обратите внимание, что длина значения String
уменьшается по мере сдвига битов.
Синтаксис
Аргументы
a
— Значение для сдвига. Целочисленные типы, String или FixedString.b
— Количество позиций сдвига. Разрешены Беззнаковые целочисленные типы, типы размером 64 бита или меньше.
Возвращаемое значение
- Сдвинутое значение.
Тип возвращаемого значения такой же, как тип входного значения.
Пример
Запрос:
Результат:
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]. Если length превышает s, она будет обрезана. Если длина не является кратной 8, на правой стороне будут добавлены 0.
Возвращаемое значение
- Подстрока. String
Пример
Запрос:
Результат:
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
) истина, если и только если все из его позиций истинны (index1
⋀index2
, ⋀index3
⋀index4
).
Возвращаемое значение
- Результат логического соединения. 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
Подсчитывает количество битов, установленных в единицу в двоичном представлении числа.
Синтаксис
Аргументы
x
— Целое или число с плавающей запятой. Функция использует представление значения в памяти. Это позволяет поддерживать числа с плавающей запятой.
Возвращаемое значение
- Количество битов, установленных в единицу в входном числе. UInt8.
Функция не преобразует входное значение в больший тип (расширение знака). Поэтому, например, bitCount(toUInt8(-1)) = 8
.
Пример
Возьмем, например, число 333. Его двоичное представление: 0000000101001101.
Запрос:
Результат:
bitHammingDistance
Возвращает расстояние Хэмминга между двоичными представлениями двух целых значений. Может быть использовано с функциями SimHash для обнаружения полудублированных строк. Чем меньше расстояние, тем более вероятно, что эти строки одинаковы.
Синтаксис
Аргументы
Возвращаемое значение
- Расстояние Хэмминга. UInt8.
Примеры
Запрос:
Результат:
С SimHash:
Результат: