Desplazamientos
Desplazamiento a izquierda y derecha
Desplazamientos es una lección gratuita de C Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C Academy incluye 4 lecciones en total.
Desplazar bits
Los operadores de desplazamiento mueven todos los bits de un entero hacia la izquierda o hacia la derecha una cantidad determinada de posiciones.
El desplazamiento a la izquierda es << y el desplazamiento a la derecha es >>.
#include <stdio.h>
int main(void) {
unsigned x = 1;
printf("1 << 3 = %u\n", x << 3);
return 0;
}El desplazamiento a la izquierda multiplica
Desplazar n posiciones a la izquierda multiplica un valor sin signo por 2 elevado a n.
1 << 3 es 8 y 5 << 1 es 10.
#include <stdio.h>
int main(void) {
printf("5 << 1 = %u\n", 5u << 1);
printf("3 << 4 = %u\n", 3u << 4);
return 0;
}El desplazamiento a la derecha divide
Desplazar n posiciones a la derecha divide un valor sin signo por 2 elevado a n y descarta los bits que salen por el extremo derecho.
20 >> 2 es 5.
#include <stdio.h>
int main(void) {
printf("20 >> 2 = %u\n", 20u >> 2);
printf("7 >> 1 = %u\n", 7u >> 1);
return 0;
}Potencias de dos
Desplazar 1 a la izquierda es la forma más rápida de generar potencias de dos.
1 << n es la potencia n de dos.
#include <stdio.h>
int main(void) {
for (int n = 0; n < 6; n++) {
printf("2^%d = %u\n", n, 1u << n);
}
return 0;
}Visualizar un desplazamiento
Imprimir los bits antes y después muestra cómo se desplaza el patrón.
#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;
}Extraer un bit
Para leer el bit número i, desplace el valor i posiciones a la derecha y aplique una máscara con 1.
El resultado es 0 o 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;
}Construir un valor bit a bit
Puede ensamblar un número colocando los bits en su posición mediante desplazamientos y combinándolos con 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;
}Precaución con el desplazamiento a la derecha con signo
Desplazar a la derecha un entero negativo con signo está definido por la implementación: es posible que se copie el bit de signo.
Para realizar operaciones bit a bit predecibles, prefiera los 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 desplazar demasiado
Desplazar una cantidad mayor o igual que el ancho del tipo produce comportamiento indefinido.
No está permitido desplazar un valor de 32 bits 32 posiciones o más.
#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;
}Combinar desplazamiento y máscara
El desplazamiento y la máscara juntos permiten extraer un campo de varios bits. Aquí extraemos los 4 bits centrales de un byte.
#include <stdio.h>
int main(void) {
unsigned v = 0b11010110;
unsigned field = (v >> 2) & 0b1111;
printf("field = %u\n", field);
return 0;
}Multiplicación y suma rápidas
Combinar desplazamientos permite multiplicar rápidamente por constantes. Multiplicar por 10 equivale a desplazar 3 posiciones (por 8) y sumar un desplazamiento de 1 posición (por 2).
#include <stdio.h>
int main(void) {
unsigned x = 7;
unsigned times10 = (x << 3) + (x << 1);
printf("7 * 10 = %u\n", times10);
return 0;
}Comprobación rápida
Compruebe sus conocimientos sobre los desplazamientos.
Resumen
Ha aprendido sobre los operadores de desplazamiento:
<<desplaza a la izquierda y multiplica por potencias de dos.>>desplaza a la derecha y divide por potencias de dos.(v >> i) & 1extrae un solo bit.- Use
unsignedpara obtener desplazamientos predecibles y nunca desplace el ancho del tipo o más posiciones.
Aprende C con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 39
- Lecciones
- 144
Preguntas frecuentes
¿La lección «Desplazamientos» es gratis?
Sí — el texto completo de «Desplazamientos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C Academy, actualiza a CoddyKit PRO. El curso de C Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Desplazamientos»?
Desplazamiento a izquierda y derecha Practicas C Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar C Academy?
No se requiere experiencia previa. C Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «Desplazamientos»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de C Academy?
Sí. Cada lección de C Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.