La librairie des opérations bit à bit contient un ensemble de fonctions qui permettent de réaliser les opérations de manipulation des bits classiques. Elles sont utilisées dans les autres fonctions de la librairie et peuvent l'être n'importe où. Comme les fonctions macros non pas de type, elles sont compatibles avec tous les types de données.
L'index du bit est utilisé pour spécifier le bit dans un nombre binaire. Les indexes débutent à partir de zéro, où zéro représente le plus petit bit significatif (LSB). Par exemple, un nombre de 8-bits a 8 bits indexés de 0 à 7 alors qu'un nombre de 16-bits est indexé de 0 à 15.
Convertit l’index du bit en bit mask. Arguments:
Configure un bit spécifique dans une variable. Arguments:
Supprime un bit spécifique dans une variable. Arguments:
Configure un bit spécifique dans une variable dans un état voulu. Arguments:
Inverse un bit spécifique dans une variable. Arguments:
Vérifie si le bit spécifique dans la variable est configuré ou pas. Arguments:
Vérifie si le bit spécifique dans la variable est supprimé ou pas. Arguments:
Initialise le troisième bit de la variable b de 8-bits et inverse la valeur du dernier bit.
#include <homelab/bit.h> int main(void) { unsigned char b = 0x00; bit_set(b, 2); bit_invert(b, 7); }
Le code suivant est une version courte du code source des fonctions de la librairie.
// // Functions for handling bits. // #define bit_mask(bit) (1 << (bit)) #define bit_set(value, bit) value |= bit_mask(bit) #define bit_clear(value, bit) value &= ~bit_mask(bit) #define bit_invert(value, bit) value ^= bit_mask(bit) #define bit_is_set(value, bit) ((value) & (bit_mask(bit))) #define bit_is_clear(value, bit) (!((value) & (bit_mask(bit)))) #define bit_set_to(v, b, x) v = ((x) ? (v | bit_mask(b)) : (v & ~bit_mask(b))) // // Functions for handling bit masks. // #define bitmask_set(value, bitMask) value |= (bitMask) #define bitmask_clear(value, bitMask) value &= ~(bitMask) #define bitmask_invert(value, bitMask) value ^= (bitMask) #define bitmask_set_to(v, m, x) v = ((x) ? (v | (m)) : (v & ~(m))) #define bitmask_is_set(value, bitMask) ((value) & (bitMask))