0Pricing
C Academy · Lección

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 & 1 comprueba 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

  1. Operadores bit a bit
  2. Desplazamientos
  3. Máscaras de bits y flags
  4. Trucos prácticos con bits
← Volver a C Academy