Битовые функции работают с любой парой типов из UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64, Float32 или Float64. Некоторые функции также поддерживают типы String и FixedString.
Тип результата — целое число с количеством битов, равным максимальному количеству битов среди аргументов. Если хотя бы один из аргументов является знаковым, результат тоже будет знаковым числом. Если аргумент является числом с плавающей запятой, он приводится к Int64.
Добавленный в: v1.1.0
Выполняет операцию побитового И над двумя значениями.
Синтаксис
Аргументы
Возвращаемое значение
Возвращает результат побитовой операции a AND b
Примеры
Пример использования
CREATE TABLE bits
(
`a` UInt8,
`b` UInt8
)
ENGINE = Memory;
INSERT INTO bits VALUES (0, 0), (0, 1), (1, 0), (1, 1);
SELECT
a,
b,
bitAnd(a, b)
FROM bits
┌─a─┬─b─┬─bitAnd(a, b)─┐
│ 0 │ 0 │ 0 │
│ 0 │ 1 │ 0 │
│ 1 │ 0 │ 0 │
│ 1 │ 1 │ 1 │
└───┴───┴──────────────┘
Добавленный в: v20.3.0
Вычисляет количество битов, равных единице, в двоичном представлении числа.
Синтаксис
Аргументы
Возвращаемое значение
Возвращает количество битов в x, установленных в единицу. UInt8.
Функция не преобразует входное значение к типу большего размера (знаковое расширение).
Например: bitCount(toUInt8(-1)) = 8.
Примеры
Пример использования
SELECT bin(333), bitCount(333);
┌─bin(333)─────────┬─bitCount(333)─┐
│ 0000000101001101 │ 5 │
└──────────────────┴───────────────┘
Добавленный в: v21.1.0
Возвращает расстояние Хэмминга между битовыми представлениями двух чисел.
Может использоваться с функциями SimHash для обнаружения почти дублирующихся строк.
Чем меньше расстояние, тем больше они похожи друг на друга.
Синтаксис
Аргументы
x — Первое число для вычисления расстояния Хэмминга. (U)Int* или Float*
y — Второе число для вычисления расстояния Хэмминга. (U)Int* или Float*
Возвращаемое значение
Возвращает расстояние Хэмминга между x и y. UInt8
Примеры
Пример использования
SELECT bitHammingDistance(111, 121);
┌─bitHammingDistance(111, 121)─┐
│ 3 │
└──────────────────────────────┘
Добавленный в: v1.1.0
Выполняет побитовую операцию НЕ.
Синтаксис
Аргументы
Возвращаемое значение
Возвращает результат ~a, то есть a с инвертированными битами.
Примеры
Пример использования
SELECT
CAST('5', 'UInt8') AS original,
bin(original) AS original_binary,
bitNot(original) AS result,
bin(bitNot(original)) AS result_binary;
┌─original─┬─original_binary─┬─result─┬─result_binary─┐
│ 5 │ 00000101 │ 250 │ 11111010 │
└──────────┴─────────────────┴────────┴───────────────┘
Добавленный в: v1.1.0
Выполняет побитовую операцию OR над двумя значениями.
Синтаксис
Аргументы
Возвращаемое значение
Возвращает результат побитовой операции a OR b
Примеры
Пример использования
CREATE TABLE bits
(
`a` UInt8,
`b` UInt8
)
ENGINE = Memory;
INSERT INTO bits VALUES (0, 0), (0, 1), (1, 0), (1, 1);
SELECT
a,
b,
bitOr(a, b)
FROM bits;
┌─a─┬─b─┬─bitOr(a, b)─┐
│ 0 │ 0 │ 0 │
│ 0 │ 1 │ 1 │
│ 1 │ 0 │ 1 │
│ 1 │ 1 │ 1 │
└───┴───┴─────────────┘
Добавленный в: v1.1.0
Циклически сдвигает биты влево на заданное число позиций. Биты, выходящие за пределы, переносятся на правую сторону.
Синтаксис
Аргументы
Возвращаемое значение
Возвращает значение после циклического сдвига; тип результата совпадает с типом a. (U)Int8/16/32/64
Примеры
Пример использования
SELECT 99 AS a, bin(a), bitRotateLeft(a, 2) AS a_rotated, bin(a_rotated);
┌──a─┬─bin(a)───┬─a_rotated─┬─bin(a_rotated)─┐
│ 99 │ 01100011 │ 141 │ 10001101 │
└────┴──────────┴───────────┴────────────────┘
Добавленный в: v1.1.0
Циклически сдвигает биты вправо на заданное число позиций. Биты, выходящие за пределы справа, переносятся влево.
Синтаксис
Аргументы
Возвращаемое значение
Возвращает значение после циклического сдвига; тип совпадает с типом a. (U)Int8/16/32/64
Примеры
Пример использования
SELECT 99 AS a, bin(a), bitRotateRight(a, 2) AS a_rotated, bin(a_rotated);
┌──a─┬─bin(a)───┬─a_rotated─┬─bin(a_rotated)─┐
│ 99 │ 01100011 │ 216 │ 11011000 │
└────┴──────────┴───────────┴────────────────┘
Добавленный в: v1.1.0
Сдвигает двоичное представление значения влево на указанное число битовых позиций.
FixedString или String рассматривается как единое многобайтовое значение.
Биты значения FixedString теряются при сдвиге за его пределы.
Напротив, значение String дополняется дополнительными байтами, поэтому биты не теряются.
Синтаксис
Аргументы
Возвращаемое значение
Возвращает сдвинутое значение того же типа, что и a.
Примеры
Пример использования с двоичным кодированием
SELECT 99 AS a, bin(a), bitShiftLeft(a, 2) AS a_shifted, bin(a_shifted);
┌──a─┬─bin(99)──┬─a_shifted─┬─bin(bitShiftLeft(99, 2))─┐
│ 99 │ 01100011 │ 140 │ 10001100 │
└────┴──────────┴───────────┴──────────────────────────┘
Пример использования с шестнадцатеричным кодированием
SELECT 'abc' AS a, hex(a), bitShiftLeft(a, 4) AS a_shifted, hex(a_shifted);
┌─a───┬─hex('abc')─┬─a_shifted─┬─hex(bitShiftLeft('abc', 4))─┐
│ abc │ 616263 │ &0 │ 06162630 │
└─────┴────────────┴───────────┴─────────────────────────────┘
Пример использования с кодировкой Fixed String
SELECT toFixedString('abc', 3) AS a, hex(a), bitShiftLeft(a, 4) AS a_shifted, hex(a_shifted);
┌─a───┬─hex(toFixedString('abc', 3))─┬─a_shifted─┬─hex(bitShiftLeft(toFixedString('abc', 3), 4))─┐
│ abc │ 616263 │ &0 │ 162630 │
└─────┴──────────────────────────────┴───────────┴───────────────────────────────────────────────┘
Добавленный в: v1.1.0
Сдвигает двоичное представление значения вправо на указанное количество битов.
FixedString или String рассматривается как одно многобайтовое значение.
Биты значения FixedString теряются по мере их сдвига за пределы строки.
Напротив, значение String расширяется дополнительными байтами, поэтому биты не теряются.
Синтаксис
Аргументы
Возвращаемое значение
Возвращает значение после сдвига; его тип совпадает с типом a.
Примеры
Пример использования с двоичным кодированием
SELECT 101 AS a, bin(a), bitShiftRight(a, 2) AS a_shifted, bin(a_shifted);
┌───a─┬─bin(101)─┬─a_shifted─┬─bin(bitShiftRight(101, 2))─┐
│ 101 │ 01100101 │ 25 │ 00011001 │
└─────┴──────────┴───────────┴────────────────────────────┘
Пример использования в шестнадцатеричном кодировании
SELECT 'abc' AS a, hex(a), bitShiftLeft(a, 4) AS a_shifted, hex(a_shifted);
┌─a───┬─hex('abc')─┬─a_shifted─┬─hex(bitShiftRight('abc', 12))─┐
│ abc │ 616263 │ │ 0616 │
└─────┴────────────┴───────────┴───────────────────────────────┘
Пример использования с кодировкой Fixed String
SELECT toFixedString('abc', 3) AS a, hex(a), bitShiftRight(a, 12) AS a_shifted, hex(a_shifted);
┌─a───┬─hex(toFixedString('abc', 3))─┬─a_shifted─┬─hex(bitShiftRight(toFixedString('abc', 3), 12))─┐
│ abc │ 616263 │ │ 000616 │
└─────┴──────────────────────────────┴───────────┴─────────────────────────────────────────────────┘
Добавленный в: v22.2.0
Возвращает подстроку длиной ‘length’ бит, начиная с бита с индексом ‘offset’.
Синтаксис
bitSlice(s, offset[, length])
Аргументы
-
s — Строка String или FixedString, из которой извлекается срез. String или FixedString
-
offset —
Задает начальную позицию бита (индексация начинается с 1).
-
Положительные значения: отсчет от начала строки.
-
Отрицательные значения: отсчет от конца строки.
(U)Int8/16/32/64 или Float*
-
length —
Необязательный параметр. Количество битов для извлечения.
-
Положительные значения: извлекаются
length битов.
-
Отрицательные значения: извлечение выполняется от смещения до
(string_length - |length|).
-
Не указано: извлечение выполняется от смещения до конца строки.
-
Если длина не кратна 8, результат дополняется нулями справа.
(U)Int8/16/32/64 или Float*
Возвращаемое значение
Строка, содержащая извлеченные биты, представленные в виде двоичной последовательности. Результат всегда дополняется до границ байта (кратных 8 битам). String
Примеры
Пример использования
SELECT bin('Hello'), bin(bitSlice('Hello', 1, 8));
SELECT bin('Hello'), bin(bitSlice('Hello', 1, 2));
SELECT bin('Hello'), bin(bitSlice('Hello', 1, 9));
SELECT bin('Hello'), bin(bitSlice('Hello', -4, 8));
┌─bin('Hello')─────────────────────────────┬─bin(bitSlice('Hello', 1, 8))─┐
│ 0100100001100101011011000110110001101111 │ 01001000 │
└──────────────────────────────────────────┴──────────────────────────────┘
┌─bin('Hello')─────────────────────────────┬─bin(bitSlice('Hello', 1, 2))─┐
│ 0100100001100101011011000110110001101111 │ 01000000 │
└──────────────────────────────────────────┴──────────────────────────────┘
┌─bin('Hello')─────────────────────────────┬─bin(bitSlice('Hello', 1, 9))─┐
│ 0100100001100101011011000110110001101111 │ 0100100000000000 │
└──────────────────────────────────────────┴──────────────────────────────┘
┌─bin('Hello')─────────────────────────────┬─bin(bitSlice('Hello', -4, 8))─┐
│ 0100100001100101011011000110110001101111 │ 11110000 │
└──────────────────────────────────────────┴───────────────────────────────┘
Добавленный в: v1.1.0
Принимает любое число и преобразует его в двоичное представление, затем возвращает значение бита в указанной позиции. Отсчёт ведётся справа налево, начиная с 0.
Синтаксис
Аргументы
Возвращаемое значение
Возвращает значение бита в позиции i в двоичном представлении a: UInt8
Примеры
Пример использования
SELECT bin(2), bitTest(2, 1);
┌─bin(2)───┬─bitTest(2, 1)─┐
│ 00000010 │ 1 │
└──────────┴───────────────┘
Добавленный в: v1.1.0
Возвращает результат логического И (оператор AND) для всех битов в указанных позициях.
Отсчёт идёт справа налево, начиная с 0.
Логическое И между двумя битами истинно тогда и только тогда, когда оба входных бита истинны.
Синтаксис
bitTestAll(a, index1[, index2, ... , indexN])
Аргументы
Возвращаемое значение
Возвращает результат логической конъюнкции типа UInt8
Примеры
Пример использования 1
SELECT bitTestAll(43, 0, 1, 3, 5);
┌─bin(43)──┬─bitTestAll(43, 0, 1, 3, 5)─┐
│ 00101011 │ 1 │
└──────────┴────────────────────────────┘
Пример использования 2
SELECT bitTestAll(43, 0, 1, 3, 5, 2);
┌─bin(43)──┬─bitTestAll(4⋯1, 3, 5, 2)─┐
│ 00101011 │ 0 │
└──────────┴──────────────────────────┘
Добавленный в: v1.1.0
Возвращает результат логической дизъюнкции (оператор OR) всех битов на указанных позициях в числе.
Отсчёт идёт справа налево, начиная с 0.
Логический OR двух битов равен true, если хотя бы один из входных битов равен true.
Синтаксис
bitTestAny(a, index1[, index2, ... , indexN])
Аргументы
Возвращаемое значение
Возвращает результат логической дизъюнкции типа UInt8
Примеры
Пример использования 1
SELECT bitTestAny(43, 0, 2);
┌─bin(43)──┬─bitTestAny(43, 0, 2)─┐
│ 00101011 │ 1 │
└──────────┴──────────────────────┘
Пример использования 2
SELECT bitTestAny(43, 4, 2);
┌─bin(43)──┬─bitTestAny(43, 4, 2)─┐
│ 00101011 │ 0 │
└──────────┴──────────────────────┘
Добавленный в: v1.1.0
Выполняет операцию побитового исключающего ИЛИ (XOR) над двумя значениями.
Синтаксис
Аргументы
Возвращаемое значение
Результат побитовой операции a XOR b
Примеры
Пример использования
CREATE TABLE bits
(
`a` UInt8,
`b` UInt8
)
ENGINE = Memory;
INSERT INTO bits VALUES (0, 0), (0, 1), (1, 0), (1, 1);
SELECT
a,
b,
bitXor(a, b)
FROM bits;
┌─a─┬─b─┬─bitXor(a, b)─┐
│ 0 │ 0 │ 0 │
│ 0 │ 1 │ 1 │
│ 1 │ 0 │ 1 │
│ 1 │ 1 │ 0 │
└───┴───┴──────────────┘
Последнее изменение 10 июня 2026 г.