# Битовые функции Битовые функции работают для любой пары типов из 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) ## bitShiftRight(a, b) ## bitTest {#bittest} Принимает любое целое число и конвертирует его в [двоичное число](https://en.wikipedia.org/wiki/Binary_number), возвращает значение бита в указанной позиции. Отсчет начинается с 0 справа налево. **Синтаксис** ```sql SELECT bitTest(number, index) ``` **Параметры** - `number` – целое число. - `index` – position of bit. **Возвращаемое значение** Возвращает значение бита в указанной позиции. Тип: `UInt8`. **Пример** Например, число 43 в двоичной системе счисления равно: 101011. Запрос: ```sql SELECT bitTest(43, 1) ``` Ответ: ```text ┌─bitTest(43, 1)─┐ │ 1 │ └────────────────┘ ``` Другой пример: Запрос: ```sql SELECT bitTest(43, 2) ``` Ответ: ```text ┌─bitTest(43, 2)─┐ │ 0 │ └────────────────┘ ``` ## bitTestAll {#bittestall} Возвращает результат [логической конъюнкции](https://en.wikipedia.org/wiki/Logical_conjunction) (оператор AND) всех битов в указанных позициях. Отсчет начинается с 0 справа налево. Бинарная конъюнкция: 0 AND 0 = 0 0 AND 1 = 0 1 AND 0 = 0 1 AND 1 = 1 **Синтаксис** ```sql SELECT bitTestAll(number, index1, index2, index3, index4, ...) ``` **Параметры** - `number` – целое число. - `index1`, `index2`, `index3`, `index4` – позиция бита. Например, конъюнкция для набора позиций `index1`, `index2`, `index3`, `index4` является истинной, если все его позиции истинны `index1` ⋀ `index2` ⋀ `index3` ⋀ `index4`. **Возвращаемое значение** Возвращает результат логической конъюнкции. Тип: `UInt8`. **Пример** Например, число 43 в двоичной системе счисления равно: 101011. Запрос: ```sql SELECT bitTestAll(43, 0, 1, 3, 5) ``` Ответ: ```text ┌─bitTestAll(43, 0, 1, 3, 5)─┐ │ 1 │ └────────────────────────────┘ ``` Другой пример: Запрос: ```sql SELECT bitTestAll(43, 0, 1, 3, 5, 2) ``` Ответ: ```text ┌─bitTestAll(43, 0, 1, 3, 5, 2)─┐ │ 0 │ └───────────────────────────────┘ ``` ## bitTestAny {#bittestany} Возвращает результат [логической дизъюнкции](https://en.wikipedia.org/wiki/Logical_disjunction) (оператор OR) всех битов в указанных позициях. Отсчет начинается с 0 справа налево. Бинарная дизъюнкция: 0 OR 0 = 0 0 OR 1 = 1 1 OR 0 = 1 1 OR 1 = 1 **Синтаксис** ```sql SELECT bitTestAny(number, index1, index2, index3, index4, ...) ``` **Параметры** - `number` – целое число. - `index1`, `index2`, `index3`, `index4` – позиции бита. **Возвращаемое значение** Возвращает результат логической дизъюнкции. Тип: `UInt8`. **Пример** Например, число 43 в двоичной системе счисления равно: 101011. Запрос: ```sql SELECT bitTestAny(43, 0, 2) ``` Ответ: ```text ┌─bitTestAny(43, 0, 2)─┐ │ 1 │ └──────────────────────┘ ``` Другой пример: Запрос: ```sql SELECT bitTestAny(43, 4, 2) ``` Ответ: ```text ┌─bitTestAny(43, 4, 2)─┐ │ 0 │ └──────────────────────┘ ``` [Оригинальная статья](https://clickhouse.yandex/docs/ru/query_language/functions/bit_functions/)