Vous utilisez les opérations logiques bit à bit et le décalage de bits. (Une recherche Google pour ces termes peut vous donner quelques exemples.)
Fondamentalement, vous déclarez un type entier (y compris int
, char
, etc.), vous entier « shift » valeurs au bit que vous voulez, alors vous faites un OU ou un ET avec l'entier.
Quelques exemples rapides (en C++):
inline bool bit_is_on(int bit_array, int bit_number)
{
return ((bit_array) & (1 << bit_number)) ? true : false;
}
inline void set_bit(int &bit_array, int bit_number)
{
bit_array |= (1 << bit_number);
}
inline void clear_bit(int &bit_array, int bit_number)
{
bit_array &= ~(1 << bit_number);
}
Notez que cela fournit des "tableaux de bits" de taille constante (sizeof(int) * 8
bits). Peut-être que c'est OK pour vous, ou peut-être que vous voulez construire quelque chose en plus de cela. (Ou réutiliser tout ce que fournit une bibliothèque.)
Ceci utilisera moins de mémoire que les tableaux bool
... CEPENDANT ... Le code généré par le compilateur pour accéder à ces bits sera plus grand et plus lent. Donc, à moins d'avoir un grand nombre d'objets qui ont besoin de contenir ces tableaux de bits, cela pourrait avoir un impact négatif sur la vitesse et l'utilisation de la mémoire.
Avez-vous essayé de chercher à voir si quelqu'un a écrit quelque chose que vous pouvez utiliser? Les gens ne vont pas simplement écrire votre code pour vous. –
J'essayais en fait de partager du code que j'avais écrit en posant une question et en y répondant, mais ce site est si rapide !!! dans les 10 minutes il m'a fallu rassembler ma réponse, déjà deux réponses sont apparues! –
SO n'est pas destiné à poser des questions que vous pouvez répondre vous-même. Et même alors, vous pourriez envisager de regarder ce qui existe sur le sujet sur le web et de comparer votre approche de ce que vous trouvez, d'abord. –