0Pricing
C Academy · Lektion

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

  1. Bitweise Operatoren
  2. Shifts
  3. Bitmasken und Flags
  4. Praktische Bit-Tricks
← Zurück zu C Academy