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