Bitmasken und Flags
Bits setzen, löschen und umschalten
Bitmasken und Flags ist eine kostenlose C Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C Academy-Kurs umfasst insgesamt 4 Lektionen.
Bits als Flags
Eine einzelne Ganzzahl kann viele Ein-/Aus-Einstellungen speichern, eine pro Bit. Jedes Bit ist ein Flag.
Das ist kompakt und schnell und wird häufig in Betriebssystemen und Embedded-Code verwendet.
#include <stdio.h>
int main(void) {
unsigned flags = 0;
printf("Initial flags = %u\n", flags);
return 0;
}Masken definieren
Eine Maske ist ein Wert, bei dem bestimmte Bits gesetzt sind. Definieren Sie jedes Flag als Zweierpotenz, damit es sein eigenes Bit belegt.
#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;
}Ein Bit setzen
Um ein Flag zu aktivieren, verknüpfen Sie den Wert per OR mit der Maske: flags |= MASK.
Bereits gesetzte Bits bleiben gesetzt.
#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;
}Ein Bit löschen
Um ein Flag zu deaktivieren, verknüpfen Sie den Wert per AND mit der invertierten Maske: flags &= ~MASK.
Die invertierte Maske enthält beim Zielbit eine 0 und an allen anderen Stellen eine 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;
}Ein Bit umschalten
Um ein Flag zu invertieren, verknüpfen Sie den Wert per XOR mit der Maske: flags ^= MASK.
War es aktiviert, wird es deaktiviert, und umgekehrt.
#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;
}Ein Bit testen
Um zu prüfen, ob ein Flag aktiviert ist, verknüpfen Sie den Wert per AND mit der Maske und testen Sie das Ergebnis: flags & MASK ist bei einem gesetzten Bit ungleich null.
#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;
}Mehrere Flags setzen
Kombinieren Sie Masken per OR, um mehrere Flags gleichzeitig zu setzen.
#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;
}Mehrere Flags gleichzeitig prüfen
Um zu testen, ob alle Flags einer Gruppe gesetzt sind, verknüpfen Sie den Wert per AND mit der kombinierten Maske und vergleichen Sie das Ergebnis mit der Maske selbst.
#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;
}Aktive Flags ausgeben
Durchlaufen Sie Ihre Masken, um zu melden, welche Flags aktuell aktiviert sind.
#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;
}Gesetzte Bits zählen
Um zu ermitteln, wie viele Flags aktiviert sind, zählen Sie die gesetzten Bits, indem Sie wiederholt das niedrigste gesetzte Bit löschen.
#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 für Flags
Mit einem enum bleiben Flag-Definitionen übersichtlich und gut lesbar.
#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;
}Kurzer Test
Testen Sie Ihr Wissen über Masken und Flags.
Zusammenfassung
Sie haben gelernt, Bit-Flags zu verwalten:
- Setzen mit
flags |= MASK. - Löschen mit
flags &= ~MASK. - Umschalten mit
flags ^= MASK. - Testen mit
flags & MASK. - Definieren Sie Masken als Zweierpotenzen, häufig mit Makros oder Enums.
Häufig gestellte Fragen
Ist die Lektion „Bitmasken und Flags“ kostenlos?
Ja — der vollständige Text von „Bitmasken und Flags“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Bitmasken und Flags“?
Bits setzen, löschen und umschalten Du übst C Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um C Academy zu starten?
Keine Vorkenntnisse erforderlich. C Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „Bitmasken und Flags“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser C Academy-Lektion Code schreiben und ausführen?
Ja. Jede C Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Bitweise Operatoren
- Shifts
- Bitmasken und Flags
- Praktische Bit-Tricks