Функции и операторы для битовых строк
В этом разделе описываются функции и операторы для проверки и обработки битовых строк, то есть значений типов bit и bit varying. (Хотя в этих таблицах упоминается только тип bit, вместо них можно использовать значения типа bit varying) Битовые строки поддерживают обычные операторы сравнения, показанные в таблице Операторы сравнения, а также операторы, перечисленные в Таблице 14.
Таблица 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 |
Некоторые из функций, имеющихся для двоичных строк, работают также и с битовыми строками, как показано в Таблице 15.
Таблица 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 ( битовая_строка bit PLACING новая_подстрока bit FROM начало integer [ FOR число integer ] ) → bit | ||
Заменяет в битовой_строке подстроку, начинающуюся с бита на позиции начало и длиной в заданное число бит, на новую_подстроку. Если число опущено, по умолчанию количество заменяемых битов определяется длиной новой_подстроки.overlay(B'01010101010101010' placing B'11111' from 2 for 3) → 0111110101010101010 |
||
position ( подстрока bit IN битовая_строка bit ) → integer | ||
Возвращает начальную позицию первого вхождения подстроки в битовой_строке или ноль, если такого вхождения нет.position(B'010' in B'000001101011') → 8 |
||
substring ( битовая_строка bit [ FROM начало integer ] [ FOR число integer ] ) → bit | ||
Извлекает из битовой_строки подстроку, начиная с бита на позиции начало (если таковая указана), и останавливаясь после заданного числа бит, если оно указано. Должен присутствовать хотя бы один из параметров: начало или число.substring(B'110010111111' from 3 for 2) → 00 |
||
get_bit ( битовая_строка bit, n integer ) → integer | ||
Извлекает из битовой строки n-й бит; первый (самый левый) бит имеет номер 0.get_bit(B'101010101010101010', 6) → 1 |
||
set_bit ( битовая_строка bit, n integer, новое_значение integer ) → bit | ||
Устанавливает для n-го бита в битовой строке новое_значение; первый (самый левый) бит имеет номер 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) и выдаст только один младший значащий бит целого.