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
- Operatory bitowe
- Przesunięcia
- Maski bitowe i flagi
- Praktyczne sztuczki bitowe