Arquitectura de Software 26 Jul 2009 07:00 pm
Array de bits en C
Si tienes que trabajar con matrices grandes y te basta con valores de 0 ó 1 lo suyo es usar bits.
Es más rápido y sobretodo ocupa muchísimo menos.
En un programa para procesar textos sobre Biomedicina ni siquiera podía crear el array con short ints porque me daba un “core”.
La idea es ésta:
#define BITMASK(b) (1 < < ((b) % CHAR_BIT))
#define BITSLOT(b) ((b) / CHAR_BIT)
#define BITSET(a, b) ((a)[BITSLOT(b)] |= BITMASK(b))
#define BITCLEAR(a, b) ((a)[BITSLOT(b)] &= ~BITMASK(b))
#define BITTEST(a, b) ((a)[BITSLOT(b)] & BITMASK(b))
#define BITNSLOTS(nb) ((nb + CHAR_BIT - 1) / CHAR_BIT)
char miArray[BITNSLOTS(1024*1024)]; // De 1024*1024 posiciones.
memset(miArray, 0, BITNSLOTS(1024*1024)); // Todo a 0
BITSET(miArray, 100); // Un 1 en la posicion 100.
mybool = BITTEST(bitarray, 200); // Leer la posicion 200.
Via | comp.lang.c FAQ list · Question 20.8