Deslocamentos
Deslocamento à esquerda e à direita.
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) & 1extrai um único bit.- Use
unsignedpara obter deslocamentos previsíveis e nunca desloque pela largura do tipo ou mais.
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.