9.6. Функции и операторы для работы с битовыми строками
В этом разделе описываются функции и операторы, предназначенные для работы с битовыми строками, то есть с данными типов bit
и bit varying
. (Хотя в этих таблицах упоминается только тип bit
, с ним полностью взаимозаменяем тип bit varying
.) Для битовых строк поддерживаются обычные операторы сравнения, показанные в Таблице 9.1, а также операторы, приведённые в Таблице 9.14.
Таблица 9.14. Операторы для работы с битовыми строками
Оператор
Описание
Пример(ы) |
---|
bit || bit
→ bit
Конкатенация
B'10001' || B'011'
→ 10001011
|
bit & bit
→ bit
Битовое И (операнды должны быть одинаковой длины)
B'10001' & B'01101'
→ 00001
|
bit | bit
→ bit
Битовое ИЛИ (операнды должны быть одинаковой длины)
B'10001' | B'01101'
→ 11101
|
bit # bit
→ bit
Битовое исключающее ИЛИ (операнды должны быть одинаковой длины)
B'10001' # B'01101'
→ 11100
|
~ bit
→ bit
Битовое НЕ
~ B'10001'
→ 01110
|
bit << integer
→ bit
Битовый сдвиг влево (с сохранением длины строки)
B'10001' << 3
→ 01000
|
bit >> integer
→ bit
Битовый сдвиг вправо (с сохранением длины строки)
B'10001' >> 2
→ 00100
|
Некоторые функции, работающие с двоичными строками, также работают и с битовыми строками, как показано в Таблице 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 либо 0, если такого вхождения нет.
position(B'010' in B'000001101011')
→ 8
|
substring ( bits bit [FROM start integer ] [FOR count integer ] ) → bit
Извлекает из bits подстроку, начиная с позиции 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)
и в результате будет получен только один самый младший бит числа.