9.6. Функции и операторы для битовых строк#

9.6. Функции и операторы для битовых строк

9.6. Функции и операторы для битовых строк #

Этот раздел описывает функции и операторы для изучения и манипулирования битовыми строками, то есть значениями типов bit и bit varying. (Хотя в этих таблицах упоминается только тип bit, значения типа bit varying могут использоваться взаимозаменяемо). Битовые строки поддерживают обычные операторы сравнения, показанные в Таблица 9.1, а также операторы, показанные в Таблица 9.14.

Таблица 9.14. Операторы битовых строк

Оператор

Описание

Пример(ы)

bit || bitbit

Конкатенация

B'10001' || B'011'10001011

bit & bitbit

Побитовое И (входные данные должны быть одинаковой длины)

B'10001' & B'01101'00001

bit | bitbit

Побитовое ИЛИ (входные данные должны быть одинаковой длины)

B'10001' | B'01101'11101

bit # bitbit

Исключающее ИЛИ побитовое (входные данные должны быть одинаковой длины)

B'10001' # B'01101'11100

~ bitbit

Побитовое НЕ

~ B'10001'01110

bit << integerbit

Побитовый сдвиг влево (длина строки сохраняется)

B'10001' << 301000

bit >> integerbit

Побитовый сдвиг вправо (длина строки сохраняется)

B'10001' >> 200100


Все функции, доступные для двоичных строк, также доступны для битовых строк, как показано в Таблица 9.15.

Таблица 9.15. Функции для работы с битовыми строками

Функция

Описание

Пример(ы)

bit_count ( bit ) → bigint

Возвращает количество установленных битов в битовой строке (также известное как popcount).

bit_count(B'10111')4

bit_length ( bit ) → integer

Возвращает количество битов в битовой строке.

bit_length(B'10111')5

length ( bit ) → integer

Возвращает количество битов в битовой строке.

length(B'10111')5

octet_length ( bit ) → integer

Возвращает количество байтов в битовой строке.

octet_length(B'1011111011')2

overlay ( bits bit PLACING newsubstring bit FROM start integer [ FOR count integer ] ) → bit

Заменяет подстроку bits, начиная с start-го бита и продолжающуюся count бит, на newsubstring. Если count не указан, по умолчанию используется длина newsubstring.

overlay(B'01010101010101010' placing B'11111' from 2 for 3)0111110101010101010

position ( substring bit IN bits bit ) → integer

Возвращает первый индекс начала указанной подстроки substring внутри bits, или ноль, если она отсутствует.

position(B'010' in B'000001101011')8

substring ( bits bit [ FROM start integer ] [ FOR count integer ] ) → bit

Извлекает подстроку из битов, начиная с start-го бита, если он указан, и останавливается после count битов, если он указан. Укажите хотя бы один из start и count.

substring(B'110010111111' from 3 for 2)00

get_bit ( bits bit, n integer ) → integer

Извлекает n-й бит из битовой строки; первый (самый левый) бит имеет номер 0.

get_bit(B'101010101010101010', 6)1

set_bit ( bits bit, n integer, newvalue integer ) → bit

Устанавливает n-й бит в битовой строке в значение newvalue; при этом первый (самый левый) бит имеет индекс 0.

set_bit(B'101010101010101010', 6, 0)101010001010101010


Кроме того, возможно приведение целочисленных значений к типу bit. Приведение целого числа к типу bit(n) копирует n самых правых битов. Приведение целого числа к битовой строке шире самого числа будет расширять знак слева. Некоторые примеры:

44::bit(10)                    0000101100
44::bit(3)                     100
cast(-44 as bit(12))           111111010100
'1110'::bit(4)::integer        14

Обратите внимание, что приведение типа к bit означает приведение к bit(1), и поэтому будет возвращать только младший бит целого числа.