C Academy · Aula

Deslocamentos

Deslocamento à esquerda e à direita.

Aula 2 de 413 etapas

Deslocamentos é uma aula grátis de C Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C Academy inclui 4 aulas no total.

Deslocando bits

Os operadores de deslocamento movem todos os bits de um inteiro para a esquerda ou para a direita por uma quantidade de posições.

O deslocamento para a esquerda é << e o deslocamento para a direita é >>.

#include <stdio.h>

int main(void) {
    unsigned x = 1;
    printf("1 << 3 = %u\n", x << 3);
    return 0;
}

Deslocamento à esquerda multiplica

Deslocar para a esquerda por n posições multiplica um valor sem sinal por 2 elevado a n.

1 << 3 é 8, e 5 << 1 é 10.

#include <stdio.h>

int main(void) {
    printf("5 << 1 = %u\n", 5u << 1);
    printf("3 << 4 = %u\n", 3u << 4);
    return 0;
}

Deslocamento à direita divide

Deslocar para a direita por n posições divide um valor sem sinal por 2 elevado a n, descartando os bits que saem pela extremidade direita.

20 >> 2 é 5.

#include <stdio.h>

int main(void) {
    printf("20 >> 2 = %u\n", 20u >> 2);
    printf("7 >> 1 = %u\n", 7u >> 1);
    return 0;
}

Potências de dois

Deslocar 1 para a esquerda é a forma mais rápida de gerar potências de dois.

1 << n é a n-ésima potência de dois.

#include <stdio.h>

int main(void) {
    for (int n = 0; n < 6; n++) {
        printf("2^%d = %u\n", n, 1u << n);
    }
    return 0;
}

Visualizando um deslocamento

Exibir os bits antes e depois mostra como o padrão desliza.

#include <stdio.h>

void print_bits(unsigned char v) {
    for (int i = 7; i >= 0; i--) putchar((v >> i) & 1 ? '1' : '0');
    putchar('\n');
}

int main(void) {
    unsigned char v = 0b00000110;
    print_bits(v);
    print_bits(v << 2);
    return 0;
}

Extraindo um bit

Para ler o bit número i, desloque o valor i posições para a direita e aplique uma máscara com 1.

O resultado é 0 ou 1.

#include <stdio.h>

int main(void) {
    unsigned v = 0b10110;
    for (int i = 0; i < 5; i++) {
        printf("bit %d = %u\n", i, (v >> i) & 1);
    }
    return 0;
}

Construindo um valor bit a bit

É possível montar um número deslocando os bits para suas posições e combinando-os com OR.

#include <stdio.h>

int main(void) {
    unsigned v = 0;
    v |= (1u << 0);
    v |= (1u << 2);
    v |= (1u << 4);
    printf("v = %u\n", v);
    return 0;
}

Cuidado com o deslocamento à direita de valores com sinal

Deslocar um inteiro negativo com sinal para a direita é definido pela implementação: a operação pode copiar o bit de sinal.

Para operações previsíveis com bits, prefira tipos unsigned.

#include <stdio.h>

int main(void) {
    int s = -8;
    printf("-8 >> 1 = %d (implementation-defined)\n", s >> 1);
    unsigned u = 8;
    printf("8u >> 1 = %u\n", u >> 1);
    return 0;
}

Evite deslocar demais

Deslocar por uma quantidade maior ou igual à largura do tipo resulta em comportamento indefinido.

Não é permitido deslocar um valor de 32 bits por 32 ou mais posições.

#include <stdio.h>
#include <limits.h>

int main(void) {
    printf("unsigned has %zu bits\n", sizeof(unsigned) * CHAR_BIT);
    printf("Safe shift 1u << 31 = %u\n", 1u << 31);
    return 0;
}

Combinando deslocamento e máscara

Juntos, o deslocamento e a máscara extraem um campo de vários bits. Aqui, extraímos os 4 bits do meio de um byte.

#include <stdio.h>

int main(void) {
    unsigned v = 0b11010110;
    unsigned field = (v >> 2) & 0b1111;
    printf("field = %u\n", field);
    return 0;
}

Multiplicação e adição rápidas

Combinar deslocamentos permite multiplicar rapidamente por constantes. Multiplicar por 10 equivale a deslocar 3 posições (vezes 8) e depois deslocar 1 posição (vezes 2).

#include <stdio.h>

int main(void) {
    unsigned x = 7;
    unsigned times10 = (x << 3) + (x << 1);
    printf("7 * 10 = %u\n", times10);
    return 0;
}

Verificação rápida

Teste seus conhecimentos sobre deslocamentos.

Recapitulação

Você aprendeu sobre os operadores de deslocamento:

  • << desloca para a esquerda e multiplica por potências de dois.
  • >> desloca para a direita e divide por potências de dois.
  • (v >> i) & 1 extrai um único bit.
  • Use unsigned para obter deslocamentos previsíveis e nunca desloque pela largura do tipo ou mais.
Grátis para começar

Aprenda C com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
39
Aulas
144

Perguntas Frequentes

A aula “Deslocamentos” é grátis?

Sim — o texto completo de “Deslocamentos” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C Academy, atualize para CoddyKit PRO. O curso de C Academy inclui 4 aulas no total.

O que vou aprender em “Deslocamentos”?

Deslocamento à esquerda e à direita. Você pratica C Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C Academy?

Nenhuma experiência prévia é necessária. C Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Deslocamentos”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C Academy?

Sim. Cada aula de C Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Operadores bit a bit
  2. Deslocamentos
  3. Máscaras de bits e flags
  4. Truques práticos com bits
← Voltar para C Academy