0Pricing
C Academy · Lekcja

Maski bitowe i flagi

Ustawianie, czyszczenie i przełączanie bitów

Maski bitowe i flagi to bezpłatna lekcja C Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C Academy zawiera 4 lekcji w sumie.

Bity jako flagi

Pojedyncza liczba całkowita może przechowywać wiele ustawień włączania i wyłączania, po jednym na każdy bit. Każdy bit jest flagą.

Takie rozwiązanie jest oszczędne i szybkie, dlatego często stosuje się je w systemach operacyjnych i kodzie wbudowanym.

#include <stdio.h>

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

Definiowanie masek

Maska to wartość, w której ustawiono określone bity. Zdefiniuj każdą flagę jako potęgę liczby 2, aby zajmowała własny bit.

#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;
}

Ustawianie bitu

Aby włączyć flagę, wykonaj operację OR wartości z maską: flags |= MASK.

Bity, które były już ustawione, pozostają ustawione.

#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;
}

Zerowanie bitu

Aby wyłączyć flagę, wykonaj operację AND z odwróconą maską: flags &= ~MASK.

Odwrócona maska ma wartość 0 na docelowym bicie i wartość 1 na wszystkich pozostałych.

#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;
}

Przełączanie bitu

Aby przełączyć flagę, wykonaj operację XOR z maską: flags ^= MASK.

Jeśli była włączona, zostanie wyłączona, i odwrotnie.

#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;
}

Sprawdzanie bitu

Aby sprawdzić, czy flaga jest włączona, wykonaj operację AND z maską i sprawdź wynik: flags & MASK jest różne od zera, gdy bit jest ustawiony.

#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;
}

Ustawianie wielu flag

Połącz maski operacją OR, aby jednocześnie ustawić kilka flag.

#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;
}

Jednoczesne sprawdzanie wielu flag

Aby sprawdzić, czy ustawione są wszystkie flagi z grupy, wykonaj operację AND ze wspólną maską i porównaj wynik z samą maską.

#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;
}

Wyświetlanie aktywnych flag

Iteruj po maskach, aby wskazać, które flagi są obecnie włączone.

#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;
}

Zliczanie ustawionych bitów

Aby dowiedzieć się, ile flag jest włączonych, zlicz ustawione bity, wielokrotnie zerując najniższy ustawiony bit.

#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;
}

Wyliczenia dla flag

Użycie elementu enum pomaga uporządkować definicje flag i zwiększa ich czytelność.

#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;
}

Szybkie sprawdzenie

Sprawdź swoją wiedzę na temat masek i flag.

Podsumowanie

Dowiedziałeś się, jak zarządzać flagami bitowymi:

  • Ustawiaj je za pomocą flags |= MASK.
  • Zeruj je za pomocą flags &= ~MASK.
  • Przełączaj je za pomocą flags ^= MASK.
  • Sprawdzaj je za pomocą flags & MASK.
  • Definiuj maski jako potęgi liczby 2, często za pomocą makr lub wyliczeń.

Często zadawane pytania

Czy lekcja „Maski bitowe i flagi” jest bezpłatna?

Tak — pełny tekst „Maski bitowe i flagi” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C Academy, przejdź na CoddyKit PRO. Kurs C Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Maski bitowe i flagi”?

Ustawianie, czyszczenie i przełączanie bitów Ćwiczysz C Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć C Academy?

Nie wymagamy żadnego doświadczenia. C Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Maski bitowe i flagi”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji C Academy?

Tak. Każda lekcja C Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Operatory bitowe
  2. Przesunięcia
  3. Maski bitowe i flagi
  4. Praktyczne sztuczki bitowe
← Powrót do C Academy