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