mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-23 16:12:01 +00:00
9ec78855cd
* DOCSUP-2806: Add meta intro. * DOCSUP-2806: Update meta intro. * DOCSUP-2806: Fix meta. * DOCSUP-2806: Add quotes for meta headers. * DOCSUP-2806: Remove quotes from meta headers. * DOCSUP-2806: Add meta headers. * DOCSUP-2806: Fix quotes in meta headers. * DOCSUP-2806: Update meta headers. * DOCSUP-2806: Fix link to nowhere in EN. * DOCSUP-2806: Fix link (settings to tune) * DOCSUP-2806: Fix links. * DOCSUP-2806:Fix links EN * DOCSUP-2806: Fix build errors. * DOCSUP-2806: Fix meta intro. * DOCSUP-2806: Fix toc_priority in examples datasets TOC. * DOCSUP-2806: Fix items order in toc. * DOCSUP-2806: Fix order in toc. * DOCSUP-2806: Fix toc order. * DOCSUP-2806: Fix order in toc. * DOCSUP-2806: Fix toc index in create * DOCSUP-2806: Fix toc order in create. Co-authored-by: romanzhukov <romanzhukov@yandex-team.ru> Co-authored-by: alexey-milovidov <milovidov@yandex-team.ru>
244 lines
6.5 KiB
Markdown
244 lines
6.5 KiB
Markdown
---
|
||
toc_priority: 48
|
||
toc_title: "\u0411\u0438\u0442\u043e\u0432\u044b\u0435\u0020\u0444\u0443\u043d\u043a\u0446\u0438\u0438"
|
||
---
|
||
|
||
# Битовые функции {#bitovye-funktsii}
|
||
|
||
Битовые функции работают для любой пары типов из UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64, Float32, Float64.
|
||
|
||
Тип результата - целое число, битность которого равна максимальной битности аргументов. Если хотя бы один аргумент знаковый, то результат - знаковое число. Если аргумент - число с плавающей запятой - оно приводится к Int64.
|
||
|
||
## bitAnd(a, b) {#bitanda-b}
|
||
|
||
## bitOr(a, b) {#bitora-b}
|
||
|
||
## bitXor(a, b) {#bitxora-b}
|
||
|
||
## bitNot(a) {#bitnota}
|
||
|
||
## bitShiftLeft(a, b) {#bitshiftlefta-b}
|
||
|
||
## bitShiftRight(a, b) {#bitshiftrighta-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 │
|
||
└──────────────────────┘
|
||
```
|
||
|
||
## bitCount {#bitcount}
|
||
|
||
Подсчитывает количество равных единице бит в числе.
|
||
|
||
**Синтаксис**
|
||
|
||
``` sql
|
||
bitCount(x)
|
||
```
|
||
|
||
**Параметры**
|
||
|
||
- `x` — [Целое число](../../sql-reference/functions/bit-functions.md) или [число с плавающей запятой](../../sql-reference/functions/bit-functions.md). Функция использует представление числа в памяти, что позволяет поддержать числа с плавающей запятой.
|
||
|
||
**Возвращаемое значение**
|
||
|
||
- Количество равных единице бит во входном числе.
|
||
|
||
Функция не преобразует входное значение в более крупный тип ([sign extension](https://en.wikipedia.org/wiki/Sign_extension)). Поэтому, например, `bitCount(toUInt8(-1)) = 8`.
|
||
|
||
Тип: `UInt8`.
|
||
|
||
**Пример**
|
||
|
||
Возьмём к примеру число 333. Его бинарное представление — 0000000101001101.
|
||
|
||
Запрос:
|
||
|
||
``` sql
|
||
SELECT bitCount(333)
|
||
```
|
||
|
||
Результат:
|
||
|
||
``` text
|
||
┌─bitCount(100)─┐
|
||
│ 5 │
|
||
└───────────────┘
|
||
```
|
||
|
||
[Оригинальная статья](https://clickhouse.tech/docs/ru/query_language/functions/bit_functions/) <!--hide-->
|