Битовые функции
Битовые функции работают для любой пары типов из UInt8
, UInt16
, UInt32
, UInt64
, Int8
, Int16
, Int32
, Int64
, Float32
, Float64
.
Тип результата - целое число, битность которого равна максимальной битности аргументов. Если хотя бы один аргумент знаковый, то результат - знаковое число. Если аргумент - число с плавающей запятой - оно приводится к 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 битов.
Возвращаемое значение
- Сдвинутое значение.
Тип совпадает с типом сдвигаемого значения.
Пример
Запрос:
Результат:
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
— целое число или число с плавающей запятой. Функция использует представление числа в памяти, что позволяет поддержать числа с плавающей запятой.
Возвращаемое значение
- Количество равных единице бит во входном числе.
Функция не преобразует входное значение в более крупный тип (sign extension). Поэтому, например, bitCount(toUInt8(-1)) = 8
.
Тип: UInt8
.
Пример
Возьмём к примеру число 333. Его бинарное представление — 0000000101001101.
Запрос:
Результат:
bitHammingDistance
Возвращает расстояние Хэмминга между битовыми представлениями двух целых чисел. Может быть использовано с функциями SimHash для проверки двух строк на схожесть. Чем меньше расстояние, тем больше вероятность, что строки совпадают.
Синтаксис
Аргументы
Возвращаемое значение
- Расстояние Хэмминга.
Тип: UInt8.
Примеры
Запрос:
Результат:
Используя SimHash:
Результат: