This is an old revision of the document!
Die Bitwise Operation Bibliothek enthält ein Set aus Makrofunktionen um grundlegende Bit-Manipulationsoperationen zu machen. Sie werden von den anderen Bibliotheken benutzt und können ebenfalls überall benutzt werden. Da Makrofunktionen keinen Typ haben, sind sie mit jedem Datentyp kompatibel.
Der Bit-Index wird benutzt um einen Bit in einer Binärnummer zu spezifizieren. Indizes werden von Null an gezählt, wobei die Null den niedrigst wertigen Bit (lsb) wiedergibt. Zum Beispiel, eine 8-Bit Nummer hat 8 Bits mit Indizes von 0-7 und eine 16-Bit Nummer hat Indizes von 0-15.
Bit index zu Bitmaske konvertieren. Parameter:
Setzt ein spezifischen Bit in der Variablen. Parameter:
Löscht ein spezifischen Bit in der Variablen. Parameter:
Setzt ein spezifischen Bit in der Variable in einen gewünschten Zustand. Parameter:
Kehrt ein spezifischen Bit in der Variablen um . Parameter:
Checkt ob ein spezifischer Bit in der Variable gesetzt ist oder nicht. Parameter:
Checkt ob ein spezifischer Bit in der Variablen gelöscht ist. Parameter:
Setzen des dritten Bits in einer 8-Bit Variablen b und invertieren des letzten Bits.
#include <homelab/bit.h> int main(void) { unsigned char b = 0x00; bit_set(b, 2); bit_invert(b, 7); }
Das Folgende ist eine gekürzte Version des Bitweisen Operator Bibliothek Quelltextes.
// // 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))