C Academy · Les

Bitmaskers en flags

Bits instellen, wissen en omschakelen

Les 3 van 413 stappen

Bitmaskers en flags is een gratis C Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject C Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus C Academy bevat in totaal 4 lessen.

Bits als vlaggen

Één integer kan veel aan-uitinstellingen opslaan, één per bit. Elke bit is een vlag.

Dit is compact en snel en komt vaak voor in besturingssystemen en embedded code.

#include <stdio.h>

int main(void) {
    unsigned flags = 0;
    printf("Initial flags = %u\n", flags);
    return 0;
}

Maskers definiëren

Een masker is een waarde waarin specifieke bits zijn ingesteld. Definieer elke vlag als een macht van twee, zodat deze zijn eigen bit gebruikt.

#include <stdio.h>

#define READ  (1u << 0)
#define WRITE (1u << 1)
#define EXEC  (1u << 2)

int main(void) {
    printf("READ=%u WRITE=%u EXEC=%u\n", READ, WRITE, EXEC);
    return 0;
}

Een bit instellen

Om een vlag aan te zetten, voer je een OR-bewerking uit tussen de waarde en het masker: flags |= MASK.

Bits die al ingesteld zijn, blijven ingesteld.

#include <stdio.h>
#define READ (1u << 0)
#define WRITE (1u << 1)

int main(void) {
    unsigned flags = 0;
    flags |= READ;
    flags |= WRITE;
    printf("flags = %u\n", flags);
    return 0;
}

Een bit wissen

Om een vlag uit te zetten, voer je een AND-bewerking uit met het geïnverteerde masker: flags &= ~MASK.

Het geïnverteerde masker heeft een 0 in het doelbit en overal elders een 1.

#include <stdio.h>
#define READ (1u << 0)
#define WRITE (1u << 1)

int main(void) {
    unsigned flags = READ | WRITE;
    flags &= ~WRITE;
    printf("flags = %u\n", flags);
    return 0;
}

Een bit omschakelen

Om een vlag te verwisselen, voer je een XOR-bewerking uit met het masker: flags ^= MASK.

Als de vlag aanstond, gaat deze uit, en omgekeerd.

#include <stdio.h>
#define EXEC (1u << 2)

int main(void) {
    unsigned flags = 0;
    flags ^= EXEC;
    printf("after toggle: %u\n", flags);
    flags ^= EXEC;
    printf("after toggle: %u\n", flags);
    return 0;
}

Een bit testen

Om te controleren of een vlag aanstaat, voer je een AND-bewerking uit met het masker en test je het resultaat: flags & MASK is niet nul als de vlag is ingesteld.

#include <stdio.h>
#define READ (1u << 0)
#define WRITE (1u << 1)

int main(void) {
    unsigned flags = READ;
    if (flags & READ)  printf("READ is on\n");
    if (flags & WRITE) printf("WRITE is on\n");
    else printf("WRITE is off\n");
    return 0;
}

Meerdere vlaggen instellen

Combineer maskers met OR om meerdere vlaggen tegelijk in te stellen.

#include <stdio.h>
#define READ (1u << 0)
#define WRITE (1u << 1)
#define EXEC (1u << 2)

int main(void) {
    unsigned flags = READ | WRITE | EXEC;
    printf("all set: %u\n", flags);
    return 0;
}

Meerdere vlaggen tegelijk controleren

Om te testen of alle vlaggen van een groep zijn ingesteld, voer je een AND-bewerking uit met het gecombineerde masker en vergelijk je het resultaat met het masker zelf.

#include <stdio.h>
#define READ (1u << 0)
#define WRITE (1u << 1)

int main(void) {
    unsigned flags = READ | WRITE;
    unsigned need = READ | WRITE;
    if ((flags & need) == need) printf("both present\n");
    return 0;
}

Actieve vlaggen afdrukken

Loop door je maskers om te melden welke vlaggen momenteel aanstaan.

#include <stdio.h>
#define READ (1u << 0)
#define WRITE (1u << 1)
#define EXEC (1u << 2)

int main(void) {
    unsigned flags = READ | EXEC;
    if (flags & READ)  printf("R");
    if (flags & WRITE) printf("W");
    if (flags & EXEC)  printf("X");
    printf("\n");
    return 0;
}

Ingestelde bits tellen

Om te weten hoeveel vlaggen aanstaan, tel je de ingestelde bits door steeds de laagst ingestelde bit te wissen.

#include <stdio.h>

int main(void) {
    unsigned v = 0b10110;
    int count = 0;
    while (v) {
        v &= (v - 1);
        count++;
    }
    printf("set bits = %d\n", count);
    return 0;
}

Enums voor vlaggen

Met een enum blijven vlagdefinities overzichtelijk en leesbaar.

#include <stdio.h>

enum { OPT_A = 1, OPT_B = 2, OPT_C = 4 };

int main(void) {
    unsigned opts = OPT_A | OPT_C;
    printf("opts = %u\n", opts);
    if (opts & OPT_C) printf("C enabled\n");
    return 0;
}

Korte controle

Test je kennis van maskers en vlaggen.

Samenvatting

Je hebt geleerd bitvlaggen te beheren:

  • Instellen met flags |= MASK.
  • Wissen met flags &= ~MASK.
  • Omschakelen met flags ^= MASK.
  • Testen met flags & MASK.
  • Definieer maskers als machten van twee, vaak met macro's of enums.
Gratis beginnen

Leer C met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
39
Lessen
144

Veelgestelde vragen

Is de les “Bitmaskers en flags” gratis?

Ja — de volledige tekst van “Bitmaskers en flags” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus C Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus C Academy bevat in totaal 4 lessen.

Wat leer ik in “Bitmaskers en flags”?

Bits instellen, wissen en omschakelen Je oefent met C Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met C Academy te beginnen?

Ervaring vooraf is niet nodig. C Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.

Hoe lang duurt de les “Bitmaskers en flags”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over C Academy?

Ja. Elke les over C Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Bitgewijze operatoren
  2. Verschuivingen
  3. Bitmaskers en flags
  4. Praktische bittrucs
← Terug naar C Academy