9.6. Funções e operadores de cadeia de bits #

Esta seção descreve as funções e operadores disponíveis para examinar e tratar cadeias de bits, ou seja, valores dos tipos de dados bit e bit varying. (Embora apenas o tipo de dados bit seja mencionado nas tabelas, os valores do tipo de dados bit varying podem ser usados da mesma forma.) As cadeias de bits oferecem suporte aos operadores de comparação usuais descritos na Tabela 9.1, assim como aos operadores descritos na Tabela 9.14.

Tabela 9.14. Operadores de cadeia de bits

Operador

Descrição

Exemplo(s)

bit || bitbit

Concatenação

B'10001' || B'011'10001011

bit & bitbit

AND bit a bit (as entradas devem ter comprimentos iguais)

B'10001' & B'01101'00001

bit | bitbit

OR bit a bit (as entradas devem ter comprimentos iguais)

B'10001' | B'01101'11101

bit # bitbit

OR exclusivo (XOR) bit a bit (as entradas devem ter comprimentos iguais)

B'10001' # B'01101'11100

~ bitbit

NOT bit a bit

~ B'10001'01110

bit << integerbit

deslocamento à esquerda bit a bit (o comprimento da cadeia é preservado)

B'10001' << 301000

bit >> integerbit

deslocamento à direita bit a bit (o comprimento da cadeia é preservado)

B'10001' >> 200100


Algumas funções disponíveis para cadeia binária também estão disponíveis para cadeia de bits, conforme descrito na Tabela 9.15.

Tabela 9.15. Funções de cadeia de bits

Função

Descrição

Exemplo(s)

bit_count ( bit ) → bigint

Retorna o número de bits definidos na cadeia de bits (também conhecido como popcount).

bit_count(B'10111')4

bit_length ( bit ) → integer

Retorna o número de bits na cadeia de bits.

bit_length(B'10111')5

length ( bit ) → integer

Retorna o número de bits na cadeia de bits.

length(B'10111')5

octet_length ( bit ) → integer

Retorna o número de bytes (octetos) na cadeia de bits.

octet_length(B'1011111011')2

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

Substitui a sub-cadeia de bits, que começa no start-ésimo bit, e se estende por count bits, pela newsubstring . Se count for omitido, o valor padrão é o comprimento da newsubstring .

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

position ( substring bit IN bits bit ) → integer

Retorna a primeira posição do início da substring especificada dentro de bits, ou zero, se não estiver presente.

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

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

Extrai a sub-cadeia de bits de bits, começando no start-ésimo bit, se este for especificado, e parando após count bits, se este for especificado. Pelo menos start ou count deve ser especificado.

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

get_bit ( bits bit, n integer ) → integer

Extrai o n-ésimo bit da cadeia de bits; o primeiro bit (o mais à esquerda) é o bit 0.

get_bit(B'101010101010101010', 6)1

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

Define o n-ésimo bit em bits como newvalue; o primeiro bit (o mais à esquerda) é o bit 0.

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


Além disso, é possível converter valores inteiros de/para o tipo de dados bit. A conversão de inteiro para o tipo de dados bit(n) copia os n bits mais à direita. A conversão de inteiro para uma cadeia de bits com comprimento maior que o próprio inteiro estende o sinal à esquerda. Alguns exemplos:

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

Note que apenas converter para bit significa converter para bit(1), portanto o resultado será apenas o bit menos significativo do inteiro.