Categorias:

Funções de expressões bit a bit

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:

BITSHIFTRIGHT

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 para 12. 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                   |
+------+----------+-----------------------+-----------------------+-----------------------+------------------------+