Функции и операторы для битовых строк
В этом разделе описываются функции и операторы для проверки и обработки битовых строк, то есть значений типов bit и bit varying. (Хотя в этих таблицах упоминается только тип bit, вместо них можно использовать значения типа bit varying) Битовые строки поддерживают обычные операторы сравнения, показанные в таблице Операторы сравнения, а также операторы, перечисленные в Таблице 14.
Таблица 14. Операторы для битовых строк
Оператор |
||
---|---|---|
Описание Пример(ы) |
||
bit || bit → bit |
||
Конкатенация
|
||
bit & bit → bit |
||
Побитовое И (операнды должны быть одинаковой длины)
|
||
bit | bit → bit |
||
Побитовое ИЛИ (операнды должны быть одинаковой длины)
|
||
bit # bit → bit |
||
Побитовое исключающее ИЛИ (операнды должны быть одинаковой длины)
|
||
~ bit → bit |
||
Побитовое НЕ
|
||
bit << integer → bit |
||
Битовый сдвиг влево (с сохранением длины строки)
|
||
bit >> integer → bit |
||
Битовый сдвиг вправо (с сохранением длины строки)
|
Некоторые из функций, имеющихся для двоичных строк, работают также и с битовыми строками, как показано в Таблице 15.
Таблица 15. Функции для битовых строк
Функция |
||
---|---|---|
Описание Пример(ы) |
||
bit_count ( bit ) → bigint |
||
Возвращает количество установленных битов (единиц) в битовой строке (эта операция также известна как «popcount»).
|
||
bit_length ( bit ) → integer |
||
Возвращает количество битов в битовой строке.
|
||
length ( bit ) → integer |
||
Возвращает количество битов в битовой строке.
|
||
octet_length ( bit ) → integer |
||
Возвращает количество байтов в битовой строке.
|
||
overlay ( битовая_строка bit PLACING новая_подстрока bit FROM начало integer [ FOR число integer ] ) → bit |
||
Заменяет в битовой_строке подстроку, начинающуюся с бита на позиции начало и длиной в заданное число бит, на новую_подстроку. Если число опущено, по умолчанию количество заменяемых битов определяется длиной новой_подстроки.
|
||
position ( подстрока bit IN битовая_строка bit ) → integer |
||
Возвращает начальную позицию первого вхождения подстроки в битовой_строке или ноль, если такого вхождения нет.
|
||
substring ( битовая_строка bit [ FROM начало integer ] [ FOR число integer ] ) → bit |
||
Извлекает из битовой_строки подстроку, начиная с бита на позиции начало (если таковая указана), и останавливаясь после заданного числа бит, если оно указано. Должен присутствовать хотя бы один из параметров: начало или число.
|
||
get_bit ( битовая_строка bit, n integer ) → integer |
||
Извлекает из битовой строки n-й бит; первый (самый левый) бит имеет номер 0.
|
||
set_bit ( битовая_строка bit, n integer, новое_значение integer ) → bit |
||
Устанавливает для n-го бита в битовой строке новое_значение; первый (самый левый) бит имеет номер 0.
|
Кроме того, в тип 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) и выдаст только один младший значащий бит целого.