Trucos prácticos con bits
Técnicas habituales
Trucos prácticos con bits es una lección gratuita de C Academy en CoddyKit. Esta es la lección 4 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.
Trucos útiles con bits
Una vez que comprende los operadores bit a bit, dispone de varios trucos compactos. Son rápidos y aparecen con frecuencia en código real.
Veamos los más habituales.
#include <stdio.h>
int main(void) {
unsigned x = 6;
printf("x & 1 = %u (odd if 1)\n", x & 1);
return 0;
}Par o impar
El bit de menor posición indica la paridad. x & 1 es 1 para números impares y 0 para números pares.
#include <stdio.h>
int main(void) {
for (unsigned x = 0; x < 5; x++) {
printf("%u is %s\n", x, (x & 1) ? "odd" : "even");
}
return 0;
}Comprobar si es una potencia de dos
Un número positivo es una potencia de dos si tiene exactamente un bit activado. La expresión x & (x - 1) es 0 únicamente en ese caso.
#include <stdio.h>
int is_pow2(unsigned x) {
return x != 0 && (x & (x - 1)) == 0;
}
int main(void) {
printf("%d %d %d\n", is_pow2(16), is_pow2(18), is_pow2(1));
return 0;
}Borrar el bit activado de menor posición
x & (x - 1) borra el bit activado de menor posición. Esta operación es la base del recuento rápido de bits activados.
#include <stdio.h>
int main(void) {
unsigned x = 0b10110;
printf("before: %u\n", x);
printf("after: %u\n", x & (x - 1));
return 0;
}Aislar el bit activado de menor posición
x & (-x) aísla el bit activado de menor posición y deja activado únicamente ese bit.
Esto depende de la representación en complemento a dos.
#include <stdio.h>
int main(void) {
unsigned x = 0b10110;
printf("lowest set bit = %u\n", x & (-x));
return 0;
}Contar los bits activados
Borrar repetidamente el bit activado de menor posición permite contar cuántos bits están activados, en tantos pasos como bits activados haya.
#include <stdio.h>
int popcount(unsigned x) {
int n = 0;
while (x) { x &= (x - 1); n++; }
return n;
}
int main(void) {
printf("%d\n", popcount(255));
printf("%d\n", popcount(0b1010));
return 0;
}Intercambiar sin una variable temporal
El intercambio mediante XOR intercambia dos enteros sin usar almacenamiento adicional.
#include <stdio.h>
int main(void) {
int a = 3, b = 8;
a ^= b; b ^= a; a ^= b;
printf("a=%d b=%d\n", a, b);
return 0;
}Redondear hacia arriba a una potencia de dos
Puede redondear un valor sin signo hacia arriba hasta la siguiente potencia de dos propagando el bit de mayor posición hacia la derecha y sumando después 1.
#include <stdio.h>
unsigned next_pow2(unsigned v) {
v--;
v |= v >> 1; v |= v >> 2; v |= v >> 4;
v |= v >> 8; v |= v >> 16;
return v + 1;
}
int main(void) {
printf("%u\n", next_pow2(17));
printf("%u\n", next_pow2(100));
return 0;
}Comprobar si los bits difieren
Dos valores tienen bits diferentes exactamente en las posiciones donde a ^ b tiene bits activados. Contarlos proporciona la distancia de Hamming.
#include <stdio.h>
int main(void) {
unsigned a = 0b1101, b = 0b1011;
unsigned diff = a ^ b;
int count = 0;
while (diff) { diff &= diff - 1; count++; }
printf("hamming distance = %d\n", count);
return 0;
}Valor absoluto sin bifurcación
Mediante el bit de signo, puede calcular un valor absoluto sin usar un if. La máscara contiene unos en todos los bits para los valores negativos y ceros en todos los bits para los no negativos.
#include <stdio.h>
int main(void) {
int x = -42;
int mask = x >> 31;
int abs = (x + mask) ^ mask;
printf("abs = %d\n", abs);
return 0;
}Activar un bit por índice
Combine desplazamiento y OR para activar una posición de bit arbitraria calculada durante la ejecución.
#include <stdio.h>
int main(void) {
unsigned v = 0;
int positions[] = {1, 3, 5};
for (int i = 0; i < 3; i++) {
v |= (1u << positions[i]);
}
printf("v = %u\n", v);
return 0;
}Comprobación rápida
Compruebe sus conocimientos sobre los trucos con bits.
Resumen
Ha aprendido trucos prácticos con bits:
x & 1comprueba si un número es par o impar.x & (x - 1)borra el bit activado de menor posición y detecta potencias de dos.x & (-x)aísla el bit activado de menor posición.- Popcount, intercambio mediante XOR, distancia de Hamming y valor absoluto sin bifurcaciones.
Preguntas frecuentes
¿La lección «Trucos prácticos con bits» es gratis?
Sí — el texto completo de «Trucos prácticos con bits» 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 «Trucos prácticos con bits»?
Técnicas habituales 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 4 de 4.
¿Cuánto tiempo toma la lección «Trucos prácticos con bits»?
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.
Todas las lecciones de este curso
- Operadores bit a bit
- Desplazamientos
- Máscaras de bits y flags
- Trucos prácticos con bits