Bitfields en C
Miembros de struct medidos en bits, para empacar flags y contadores chicos.
#include <stdio.h>
typedef struct {
unsigned int visible : 1;
unsigned int locked : 1;
unsigned int stars : 2;
unsigned int tour : 4;
} StepFlags;
void flags(void) {
StepFlags f = {.visible = 1, .stars = 3, .tour = 11};
printf("size %zu\n", sizeof f);
printf("visible %u locked %u stars %u tour %u\n", f.visible, f.locked,
f.stars, f.tour);
f.stars = 4;
printf("wrapped stars to %u\n", f.stars);
}
Cómo funciona
- El ancho sigue al nombre del miembro tras dos puntos.
- El orden de empaque y el relleno dependen de la implementación.
- Un tipo sin signo evita sorpresas con el bit de signo.
Palabras clave y builtins usados aquí
intsizeofstructtypedefunsignedvoid
El intento, en números
- Líneas
- 19
- Caracteres a escribir
- 401
- Tokens
- 113
- Ritmo de tres estrellas
- 100 tpm
Al ritmo de tres estrellas de 100 tokens por minuto, este intento toma unos 68 segundos.
Paso 3 de 5 en Uniones y disposición; paso 3 de 13 en Uniones, campos de bits y comportamiento indefinido.