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");
}
}
}