Esta página também está disponível em outros 2 idiomas.

<<

[Bitwise Operators]

Descrição

O operador de deslocamento a esquerda << faz os bits do operando à esquerda do operador serem deslocados a esquerda pelo número de posições especificadas pelo operando à direita do operador.

Sintaxe

variável << numero_de_bits;

Parâmetros

variável: Tipos de dados permitidos: byte, int, long
numero_de_bits: um número menor ou igual 32. Tipos de dados permitidos: int

Código de Exemplo

int a = 5;      // binário: 0000000000000101
int b = a << 3; // binário: 0000000000101000, ou 40 em decimal

Notas e Advertências

Quando você desloca um valor x por y bits (x << y), os y bits mais a esquerda em x são perdidos, literalmente deslocados para fora da existência:

int x = 5;  // binário: 0000000000000101
int y = 14;
int resultado = x << y;  // binário: 0100000000000000 - os primeiros 1 em 101 foram descartados

Se você tem certeza que nenhum dos bits 1 em um valor serão descartados no deslocamento, uma forma simples de pensar do operador de deslocamento à esquerda é que ele multiplica o operando a esquerda por 2 elevado ao operando a direita. Por exemplo, para gerar potências de 2, as seguintes expressões podem ser utilizadas:

   Operação  Resultado
   ---------  ------
    1 <<  0      1
    1 <<  1      2
    1 <<  2      4
    1 <<  3      8
    ...
    1 <<  8    256
    1 <<  9    512
    1 << 10   1024
    ...

O exemplo a seguir pode ser utilizado para imprimir um byte recebido no monitor serial, usando o operador de deslocamento à esquerda para mover 1 pelo número de bits especificado, testar o valor com o E (&), e imprimir seu valor (1 ou 0):

// Imprime o valor binário (1 ou 0) de um byte
void printOut1(int c) {
  for (int bits = 7; bits > -1; bits--) {
    // Compara bits 7-0 no byte
    if (c & (1 << bits)) {
      Serial.print("1");
    }
    else {
      Serial.print("0");
    }
  }
}

Ver Também