Wat is bitwise logica?

Bitwise logica werkt met bits, ofwel enen en nullen. In plaats van te werken met de waarheidswaarden true en false zoals bij gewone logica, behandelt bitwise logica de individuele bits uit de binaire representatie van een getal als waarheidswaarden.

Bitwise operaties worden vaak gebruikt in systeemprogrammering, embedded development en bij optimalisaties in softwareontwikkeling, omdat ze snel en direct op het geheugen werken.

Casus

Stel dat je in een programma een reeks vlaggen gebruikt om de status van een printer aan te geven (bijv. papier op, offline, toner op, enz.). Met bitwise logica kun je meerdere van deze statuswaarden efficiënt in één getal combineren en testen.

Hoe zit een bitwise operatie in elkaar?

Bitwise operaties gebruiken operatoren om per bit logische bewerkingen uit te voeren. Je kunt deze zien als het toepassen van logica op twee rijen bits. Hieronder zie je de meestgebruikte bitwise operatoren:

NaamTekenWerking per bitToepassing
AND&Alleen 1 als beide bits 1 zijnBits uitschakelen (resetten)
OR|1 als één van de bits 1 isBits aanzetten (zetten)
XOR (exclusive OR)^1 als precies één bit 1 isBits omwisselen (inverteren)
NOT / Complement~Keert alle bits omInversie van bits
Left Shift<<Verschuift bits naar linksVermenigvuldigen met macht van 2
Right Shift>>Verschuift bits naar rechtsDelen door macht van 2

Codevoorbeeld

int a = 6;     // Binair: 0110
int b = 10;    // Binair: 1010
 
Console.WriteLine(a & b);  // AND:  0010 = 2
Console.WriteLine(a | b);  // OR:   1110 = 14
Console.WriteLine(a ^ b);  // XOR:  1100 = 12
Console.WriteLine(~a);     // NOT:  ...1001 (2’s complement: -7)
Console.WriteLine(a << 1); // SHIFT LEFT: 1100 = 12
Console.WriteLine(b >> 1); // SHIFT RIGHT: 0101 = 5

Bitwise waarheidstabellen

Net zoals bij proposities kunnen we ook hier waarheidstabellen gebruiken, maar dan per bitpositie. Hieronder zie je hoe de bitwise operaties werken per combinatie van bits:

Bit 1Bit 2ANDORXOR
00000
01011
10011
11110

De ~ (NOT) operator is unair (werkt op één operand) en keert elke 1 om naar 0 en andersom.

Hoe gebruik je bitwise logica?

Bitwise logica wordt vaak gebruikt in:

  • Efficiënte data-opslag via bit flags
  • Lage-level hardware interactie
  • Systeembesturingen (bijv. microcontrollers)
  • Versleuteling, maskering en optimalisaties
  • Statusbeheer

Casus

Stel je ontwikkelt een systeem voor het beheren van printers in een kantooromgeving. Elke printer kan meerdere statussen tegelijk hebben, zoals:

  • Offline
  • Papier op
  • Toner bijna op
  • Papier is vastgelopen Dit kan uitgewerkt worden door de statusses bij te houden met een enum om zo bitwise logica toe te passen
// Een printer die zowel offline is als een papierstoring heeft, krijgt de status:
PrinterStatus status = PrinterStatus.Offline | PrinterStatus.PaperJam; // 0001 | 1000 = 1001
 
//Je kunt dan eenvoudig testen op individuele problemen met bitwise AND:
bool isOffline = (status & PrinterStatus.Offline) != 0;
bool hasJam = (status & PrinterStatus.PaperJam) != 0;
 
//Of een printer oké is (dus géén fouten bevat):
bool isOk = status == PrinterStatus.Ok;
 
//Print wat de statussen zijn
Console.WriteLine(status); // Ouput: Offline, PaperJam
Console.WriteLine(isOffline); // Ouput: true
Console.WriteLine(hasJam); // Output: true
Console.WriteLine(isOk); // Output: false
 
[Flags]
enum PrinterStatus
{
   Ok = 0,
    Offline = 1,            // 0001
    PaperEmpty = 2,         // 0010
    TonerLow = 4,           // 0100
    PaperJam = 8            // 1000
}

[Flags] wordt gebruikt zodat, als je een print wil doen van de status/enum waarden, dan krijg je de string waarde terug in plaats van de int waarde.


Volgende stap: Stappen bitwise