Bitwise

bewerkingen op bit-niveau

Bitwise shift

unsigned short getal{0b0010'1101'0000'1001};

Shift 2 bit posities naar links
resultaat = static_cast<unsigned short>(getal << 2);
Shift 2 bit posities naar rechts
resultaat = static_cast<unsigned short>(getal >> 2);

static_cast<unsigned short>() is nodig omdat C++ van resultaat standaard een integer maakt ipv een unsigned short.

Als getal al een int is, dan is static_cast<>() niet nodig

Table 1. Bitwise operatoren
Bitwise Operator Omschrijving
font &= bold; Bitwise-AND
font |= bold; Bitwise-OR
font ^= bold; Bitwise-XOR (Exclusive OR)
font &= ~bold; Bitwise-Complement (ook Bitwise-NOT genoemd)

Voorbeelden

const unsigned int rood{0xFF0000}; // Rood (RGB)
const unsigned int blauw{0x0000FF};// Blauw (RGB)
const unsigned int wit{0xFFFFFF};  // Wit (RGB)

Bitwise Complement

unsigned int kleur = ~rood; (kleur = 0x00FFFF}; // Cyaan

Bitwise AND

unsigned int kleur = rood & blauw; (kleur = 0x000000); // zwart

Bitwise OR

unsigned int kleur = rood | blauw; (kleur = 0xFF00FF); roze

Bitwise XOR

unsigned int kleur = rood ^ wit; (kleur = 0xFF0000); // rood

Werken met Masks
unsigned int flags{0xFF};               // Variabele flags
unsigned int bit1masker{0x1};           // Selecteer bit 1
unsigned int bit6masker{0b100000};      // selecteer bit 6
unsigned int bit20masker{1u << 19};     // selecteer bit 20

Selecteer bit 1 van flags

flags & bit1masker;

Selecteer bit 6 van flags

flags & bit6masker;

Schakel bit 6 van flags uit

flags &= ~bit6masker;

Schakel bit 20 van flags om (aan naar uit, of uit naar aan)

flags |= bit20masker;