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