- Categorias:
BITSHIFTLEFT¶
Desloca os bits de uma expressão numérica ou binária n
posições para a esquerda.
- Aliases:
BIT_SHIFTLEFT
- Consulte também:
Sintaxe¶
BITSHIFTLEFT( <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 de qualquer argumento for numérico, mas não INTEGER (por exemplo, FLOAT, DECIMAL etc.), então esse argumento será convertido em um valor INTEGER.
Se o tipo de dados de qualquer 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.Se um valor INTEGER com sinal for retornado e o valor do bit alto mudar (de 0 para 1 ou de 1 para 0), o sinal do resultado será invertido. Por exemplo,
BITSHIFTLEFT(1, 127)
retorna um número negativo.Se um valor INTEGER assinado for retornado, os bits que forem deslocados além do final do valor de saída de 128 bits serão descartados.
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 BITSHIFTLEFT 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,
BITSHIFTLEFT(bit1, 1),
BITSHIFTLEFT(bit3, 1),
BITSHIFTLEFT(bit1, 8),
BITSHIFTLEFT(bit3, 16)
FROM bits;
+------+----------+-----------------------+-----------------------+-----------------------+------------------------+
| BIT1 | BIT3 | BITSHIFTLEFT(BIT1, 1) | BITSHIFTLEFT(BIT3, 1) | BITSHIFTLEFT(BIT1, 8) | BITSHIFTLEFT(BIT3, 16) |
|------+----------+-----------------------+-----------------------+-----------------------+------------------------|
| 1010 | 11001010 | 2020 | 22002020 | 1000 | 10100000 |
| 1100 | 01011010 | 2200 | 02022020 | 0000 | 10100000 |
| BCBC | ABCDABCD | 7978 | 579B579A | BC00 | ABCD0000 |
| NULL | NULL | NULL | NULL | NULL | NULL |
+------+----------+-----------------------+-----------------------+-----------------------+------------------------+