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

Битовые функции работают для любой пары типов из UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64, Float32, Float64.

Тип результата — целое число, битность которого равна максимальной битности аргументов. Если хотя бы один аргумент знаковый, то результат — знаковое число. Если аргумент — число с плавающей запятой — оно приводится к Int64.

Набор поддерживаемых функций RQL и их поведение зависят от версии установленного ClickHouse. Если функция не поддерживается в используемой версии ClickHouse, она также не будет доступна в RQL. Ознакомиться с актуальным списком функций и их поведением можно в официальном репозитории ClickHouse, выбрав нужную версию из веток. Например: список битовых функций для ClickHouse 24.7.

Table 1. Битовые функции
Функция Описание

bitAnd(a, b)

Выполняет побитовую операцию И (AND) над двумя числами a и b. Тип результата — целое число, битность которого равна максимальной битности аргументов.

bitOr(a, b)

Выполняет побитовую операцию ИЛИ (OR) над двумя числами a и b. Тип результата совпадает с типом входных значений.

bitXor(a, b)

Выполняет побитовую операцию исключающее ИЛИ (XOR) над двумя числами a и b. Тип результата совпадает с типом входных значений.

bitNot(a)

Выполняет побитовую операцию НЕ (NOT) над числом a, инвертируя каждый бит. Тип результата совпадает с типом входного значения.

bitShiftLeft(a, b)

Сдвигает бинарное представление числа a на b бит влево. Поддерживаются числа и строки. Тип результата совпадает с типом сдвигаемого значения.

bitShiftRight(a, b)

Сдвигает бинарное представление числа a на b бит вправо. Поддерживаются числа и строки. Тип результата совпадает с типом сдвигаемого значения.

bitTest(number, index)

Возвращает значение бита на позиции index в числе number. Отсчет начинается с 0 справа налево. Возвращает 1, если бит установлен, и 0, если бит сброшен.

bitTestAll(number, index1, index2, …​)

Проверяет, все ли указанные биты в позициях index1, index2, …​ установлены в 1 в числе number. Возвращает 1, если все указанные биты установлены, и 0 в противном случае.

bitTestAny(number, index1, index2, …​)

Проверяет, установлен ли хотя бы один из указанных битов в позициях index1, index2, …​ в числе number в 1. Возвращает 1, если хотя бы один указанный бит установлен, и 0 в противном случае.

bitCount(x)

Подсчитывает количество бит, установленных в 1, в числе x. Возвращает количество этих бит.

bitHammingDistance(int1, int2)

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