Bitweise Operationen

Die Bibliothek für bitweise Operationen beinhaltet eine Zusammenstellung von Makrofunktionen zur Durchführung von Bitmanipulationsoperationen. Sie werden von den anderen Komponenten der Bibliotheken genutzt und können überall angewandt werden. Da die Makrofunktionen keinen speziellen Typ haben, sind sie mit jedem Datentyp kompatibel.

Der Bit-Index wird genutzt um das Bit in einer Binärzahl zu spezifizieren. Indizes werden beginnend bei Null gezählt, wobei Null das niedrigstwertige Bit (LSB) kennzeichnet. Eine 8-Bit-Zahl hat zum Beispiel Indizes von 0 bis 7, eine 16-Bit Zahl Indizes von 0 bis 15.

Funktionen

  • bit_mask(bit)

Bit-Index zu Bitmaske konvertieren. Parameter:

  • bit - Bit-Index.
  • Gibt Bitmaske aus.
  • bit_set(value, bit)

Setzt ein bestimmtes Bit in einer Variablen. Parameter:

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

Löscht ein bestimmtes Bit in einer Variablen. Parameter:

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

Setzt ein bestimmtes Bit einer Variablen in einen gewünschten Zustand. Parameter:

  • value - Variable.
  • bit - Bit-Index.
  • state - Status (true or false).
  • bit_invert(value, bit)

Invertiert ein bestimmtes Bit der Variable. Parameter:

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

Überprüft, ob ein bestimmtes Bit in einer Variablen gesetzt ist oder nicht. Parameter:

  • value - Variable.
  • bit - Bit-Index.
  • Gibt den Bool’schen Wert true, wenn das Bit gesetzt und false wenn das Bit gelöscht wurde zurück.
  • bit_is_clear(value, bit)

Überprüft, ob ein bestimmtes Bit in einer Variablen gelöscht wurde oder nicht. Parameter:

  • value - Variable.
  • bit - Bit-Index.
  • Gibt den Bool’schen Wert true, wenn das Bit gelöscht wurde undfalse wenn das Bit gesetzt wurde zurück.

Beispiel

Das dritte Bit einer 8-Bit Variablen b setzen und Invertieren des letzten Bits.

#include <homelab/bit.h>
 
int main(void)
{
	unsigned char b = 0x00;
 
	bit_set(b, 2);
	bit_invert(b, 7);
}

Quelle

Nachfolgend eine gekürzte Version des Quellcodes der Bibliothek für bitweise Operationen.

//
// Funktionen zur Bearbeitung von 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)))
 
//
// Funktionen zur Bearbeitung von Bitmasken.
//
#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))
de/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