ClickHouse/docs/ru/query_language/functions/bit_functions.md
2020-01-30 13:34:55 +03:00

199 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Битовые функции
Битовые функции работают для любой пары типов из 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.tech/docs/ru/query_language/functions/bit_functions/) <!--hide-->