Bitmaskers en flags
Bits instellen, wissen en omschakelen
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.
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
- Bitgewijze operatoren
- Verschuivingen
- Bitmaskers en flags
- Praktische bittrucs