Opérations bit à bit

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.

Fonctions

  • bit_mask(bit)

Convertit l’index du bit en bit mask. Arguments:

  • bit - Index du bit.
  • Renvoi le bit mask.
  • bit_set(value, bit)

Configure un bit spécifique dans une variable. Arguments:

  • value - Variable.
  • bit - Index du bit.
  • bit_clear(value, bit)

Supprime un bit spécifique dans une variable. Arguments:

  • value - Variable.
  • bit - Index du bit.
  • bit_set_to(value, bit, state)

Configure un bit spécifique dans une variable dans un état voulu. Arguments:

  • value - Variable.
  • bit - Index du bit.
  • state - Etat (vrai ou faux).
  • bit_invert(value, bit)

Inverse un bit spécifique dans une variable. Arguments:

  • value - Variable.
  • bit - Index du bit.
  • bit_is_set(value, bit)

Vérifie si le bit spécifique dans la variable est configuré ou pas. Arguments:

  • value - Variable.
  • bit - Index du bit.
  • Retourne la valeur booléenne vrai quand le bit est configuré et faux dans le cas contraire.
  • bit_is_clear(value, bit)

Vérifie si le bit spécifique dans la variable est supprimé ou pas. Arguments:

  • value - Variable.
  • bit - Index du bit.
  • Retourne la valeur booléenne vrai quand le bit est supprimé et faux dans le cas contraire.

Exemple

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);
}

Source

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))
fr/software/homelab/library/bit.txt · Last modified: 2020/07/20 09:00 by 127.0.0.1
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0