ClickHouse/docs/ru/sql-reference/functions/bit-functions.md
Ivan Blinkov d91c97d15d
[docs] replace underscores with hyphens (#10606)
* Replace underscores with hyphens

* remove temporary code

* fix style check

* fix collapse
2020-04-30 21:19:18 +03:00

6.4 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 │
└───────────────┘

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