Solo necesito un bit para representar mis datos: 1 o 0. ¿Cuál es la mejor manera de hacerlo en C? Los tipos de datos "normales" son demasiado grandes.
podrías crear
typedef struct foo { unsigned x:1; } foo; Donde le ha dicho al compilador que solo usará un bit de x .
Pero debido a los arreglos de empaquetamiento de la estructura (el estándar C es intencionalmente flexible para que los compiladores puedan optimizar de acuerdo con la arquitectura de la máquina), es posible que aún ocupe tanto espacio en la memoria como un unsigned normal y una matriz de foo s. no tiene que ser bit a bit contigua.
Si no necesita millones de estas banderas o tiene restricciones de memoria extremadamente limitadas, la mejor manera es definitivamente un int .
Esto se debe a que un int normalmente corresponde al tamaño de palabra natural de su plataforma y, correctamente alineado, se puede acceder rápidamente. De todos modos, la máquina lee una palabra a la vez y el uso de bits individuales requiere enmascaramiento y desplazamiento, lo que cuesta tiempo. En su PC típica con gigabytes de RAM, esto sería una tontería.
Si el consumo de memoria es realmente un problema, existen estructuras de campo de bits.