ClickHouse/docs/ru/sql_reference/functions/bit_functions.md
2020-04-09 21:06:07 +03:00

6.3 KiB
Raw Blame History

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

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

Принимает любое целое число и конвертирует его в двоичное число, возвращает значение бита в указанной позиции. Отсчет начинается с 0 справа налево.

Синтаксис

SELECT bitTest(number, index)

Параметры

  • number целое число.
  • index position of bit.

Возвращаемое значение

Возвращает значение бита в указанной позиции.

Тип: UInt8.

Пример

Например, число 43 в двоичной системе счисления равно: 101011.

Запрос:

SELECT bitTest(43, 1)

Ответ:

┌─bitTest(43, 1)─┐
│              1 │
└────────────────┘

Другой пример:

Запрос:

SELECT bitTest(43, 2)

Ответ:

┌─bitTest(43, 2)─┐
│              0 │
└────────────────┘

bitTestAll

Возвращает результат логической конъюнкции (оператор AND) всех битов в указанных позициях. Отсчет начинается с 0 справа налево.

Бинарная конъюнкция:

0 AND 0 = 0 0 AND 1 = 0 1 AND 0 = 0 1 AND 1 = 1

Синтаксис

SELECT bitTestAll(number, index1, index2, index3, index4, ...)

Параметры

  • number целое число.
  • index1, index2, index3, index4 позиция бита. Например, конъюнкция для набора позиций index1, index2, index3, index4 является истинной, если все его позиции истинны index1index2index3index4.

Возвращаемое значение

Возвращает результат логической конъюнкции.

Тип: UInt8.

Пример

Например, число 43 в двоичной системе счисления равно: 101011.

Запрос:

SELECT bitTestAll(43, 0, 1, 3, 5)

Ответ:

┌─bitTestAll(43, 0, 1, 3, 5)─┐
│                          1 │
└────────────────────────────┘

Другой пример:

Запрос:

SELECT bitTestAll(43, 0, 1, 3, 5, 2)

Ответ:

┌─bitTestAll(43, 0, 1, 3, 5, 2)─┐
│                             0 │
└───────────────────────────────┘

bitTestAny

Возвращает результат логической дизъюнкции (оператор OR) всех битов в указанных позициях. Отсчет начинается с 0 справа налево.

Бинарная дизъюнкция:

0 OR 0 = 0 0 OR 1 = 1 1 OR 0 = 1 1 OR 1 = 1

Синтаксис

SELECT bitTestAny(number, index1, index2, index3, index4, ...)

Параметры

  • number целое число.
  • index1, index2, index3, index4 позиции бита.

Возвращаемое значение

Возвращает результат логической дизъюнкции.

Тип: UInt8.

Пример

Например, число 43 в двоичной системе счисления равно: 101011.

Запрос:

SELECT bitTestAny(43, 0, 2)

Ответ:

┌─bitTestAny(43, 0, 2)─┐
│                    1 │
└──────────────────────┘

Другой пример:

Запрос:

SELECT bitTestAny(43, 4, 2)

Ответ:

┌─bitTestAny(43, 4, 2)─┐
│                    0 │
└──────────────────────┘

bitCount

Подсчитывает количество равных единице бит в числе.

Синтаксис

bitCount(x)

Параметры

Возвращаемое значение

  • Количество равных единице бит во входном числе.

Функция не преобразует входное значение в более крупный тип (sign extension). Поэтому, например, bitCount(toUInt8(-1)) = 8.

Тип: UInt8.

Пример

Возьмём к примеру число 333. Его бинарное представление — 0000000101001101.

Запрос:

SELECT bitCount(333)

Результат:

┌─bitCount(100)─┐
│             5 │
└───────────────┘

Оригинальная статья