- Categorias:
BITSHIFTRIGHT¶
Desloca os bits de uma expressão numérica ou binária n
posições para a direita.
- Aliases:
BIT_SHIFTRIGHT
- Consulte também:
Sintaxe¶
BITSHIFTRIGHT( <expr1> , <n> )
Argumentos¶
expr1
Esta expressão deve ser avaliada como um valor INTEGER, um valor BINARY ou um valor de um tipo de dados que pode ser convertido em um valor INTEGER.
n
O número de bits a serem movidos.
Retornos¶
Retorna um valor INTEGER, BINARY ou NULL:
Quando a expressão de entrada contém um valor INTEGER, retorna um inteiro assinado de 128 bits (16 bytes), independentemente do tamanho ou tipo de dados do valor de dados de entrada.
Quando a expressão de entrada contém um valor BINARY, retorna um valor BINARY.
Se algum argumento for NULL, retorna NULL.
Notas de uso¶
Se o tipo de dados do argumento for numérico, mas não for INTEGER (por exemplo, FLOAT, DECIMAL etc.), o argumento será convertido em um valor INTEGER.
Se o tipo de dados do argumento for uma cadeia de caracteres (por exemplo, VARCHAR), o argumento será convertido para um valor INTEGER, se possível. Por exemplo, a cadeia de caracteres
12.3
é convertida para12
. Se o valor não puder ser convertido em um valor INTEGER, o valor será tratado como NULL.A função não converte implicitamente argumentos em valores BINARY.
Exemplos¶
As seções a seguir contêm exemplos de valores de argumento INTEGER e valores de argumento BINARY.
Usando BITSHIFTLEFT e BITSHIFTRIGHT com valores de argumento INTEGER¶
Criar uma tabela e dados simples:
CREATE OR REPLACE TABLE bits (ID INTEGER, bit1 INTEGER, bit2 INTEGER);
INSERT INTO bits (ID, bit1, bit2) VALUES
( 11, 1, 1), -- Bits are all the same.
( 24, 2, 4), -- Bits are all different.
( 42, 4, 2), -- Bits are all different.
( 1624, 16, 24), -- Bits overlap.
(65504, 0, 65504), -- Lots of bits (all but the low 6 bits).
( 0, NULL, NULL) -- No bits.
;
Executar a consulta:
SELECT bit1,
bit2,
BITSHIFTLEFT(bit1, 1),
BITSHIFTRIGHT(bit2, 1)
FROM bits
ORDER BY bit1;
+------+-------+-----------------------+------------------------+
| BIT1 | BIT2 | BITSHIFTLEFT(BIT1, 1) | BITSHIFTRIGHT(BIT2, 1) |
|------+-------+-----------------------+------------------------|
| 0 | 65504 | 0 | 32752 |
| 1 | 1 | 2 | 0 |
| 2 | 4 | 4 | 2 |
| 4 | 2 | 8 | 1 |
| 16 | 24 | 32 | 12 |
| NULL | NULL | NULL | NULL |
+------+-------+-----------------------+------------------------+
Como usar BITSHIFTRIGHT com valores de argumento BINARY¶
Crie uma tabela simples e insira os dados:
CREATE OR REPLACE TABLE bits (ID INTEGER, bit1 BINARY(2), bit2 BINARY(2), bit3 BINARY(4));
INSERT INTO bits VALUES
(1, x'1010', x'0101', x'11001010'),
(2, x'1100', x'0011', x'01011010'),
(3, x'BCBC', x'EEFF', x'ABCDABCD'),
(4, NULL, NULL, NULL);
Nota
Os valores BINARY são inseridos usando a notação x'value'
, onde value
contém dígitos hexadecimais. Para obter mais informações, consulte Entrada e saída de binários.
Executar a consulta:
SELECT bit1,
bit3,
BITSHIFTRIGHT(bit1, 1),
BITSHIFTRIGHT(bit3, 1),
BITSHIFTRIGHT(bit1, 8),
BITSHIFTRIGHT(bit3, 16)
FROM bits;
+------+----------+------------------------+------------------------+------------------------+-------------------------+
| BIT1 | BIT3 | BITSHIFTRIGHT(BIT1, 1) | BITSHIFTRIGHT(BIT3, 1) | BITSHIFTRIGHT(BIT1, 8) | BITSHIFTRIGHT(BIT3, 16) |
|------+----------+------------------------+------------------------+------------------------+-------------------------|
| 1010 | 11001010 | 0808 | 08800808 | 0010 | 00001100 |
| 1100 | 01011010 | 0880 | 00808808 | 0011 | 00000101 |
| BCBC | ABCDABCD | 5E5E | 55E6D5E6 | 00BC | 0000ABCD |
| NULL | NULL | NULL | NULL | NULL | NULL |
+------+----------+------------------------+------------------------+------------------------+-------------------------+