Udostępnij za pośrednictwem


Pola bitowe C++

Klasy i struktur mogą zawierać członków, które zajmują mniej miejsca niż typ integralny.Elementy te są określone jako pola bitowego.Składnia dla pola bitowego ; niewłaściwy Członkowskie deklarator specyfikacji w następujący sposób:

declarator  : constant-expression

Uwagi

(Opcjonalnie) declarator jest nazwą, w którym członek jest dostępny w programie.Musi być typem całkowitym (w tym typy wyliczane).Wyrażenie stała określa liczbę bitów członka zajmuje w strukturze.Pól bitowych anonimowy — oznacza to, że pole bitowe członków z identyfikatorem nie — można używanym do uzupełniania.

[!UWAGA]

Pole bitowe nienazwane szerokości 0 wymusza wyrównanie następne pole bitowe do następnego type granicę, gdzie type jest typem elementu członkowskiego.

Poniższy przykład deklaruje strukturę, która zawiera pola bitowego:

// bit_fields1.cpp
// compile with: /LD
struct Date {
   unsigned short nWeekDay  : 3;    // 0..7   (3 bits)
   unsigned short nMonthDay : 6;    // 0..31  (6 bits)
   unsigned short nMonth    : 5;    // 0..12  (5 bits)
   unsigned short nYear     : 8;    // 0..100 (8 bits)
};

Układ pamięci koncepcyjne obiektu typu Date jest pokazane na poniższym rysunku.

Układ pamięci obiekt Date

Grafika przedstawiająca układ pamięci obiektu Data

Należy zauważyć, że nYear jest równy 8 bitów i spowodowałoby przepełnienie granicy słowa deklarowanych typu krótko niepodpisane.W związku z tym, rozpoczyna się na początku nowego krótko niepodpisane.Nie jest konieczne, że wszystkie bity pola mieści się w jednym obiekcie typu podstawowego; nowe jednostki składowania są przydzielane zgodnie z liczbą bitów wymagane w zgłoszeniu.

Programu Microsoft

Porządkowanie danych zgłoszonych jako pól bitowych jest od minimum do maksimum bitu, jak pokazano na rysunku powyżej.

KONIEC Microsoft szczególne

Jeśli deklaracja struktury zawiera nazwy pól, o długości 0, jak pokazano w poniższym przykładzie

// bit_fields2.cpp
// compile with: /LD
struct Date {
   unsigned nWeekDay  : 3;    // 0..7   (3 bits)
   unsigned nMonthDay : 6;    // 0..31  (6 bits)
   unsigned           : 0;    // Force alignment to next boundary.
   unsigned nMonth    : 5;    // 0..12  (5 bits)
   unsigned nYear     : 8;    // 0..100 (8 bits)
};

Układ pamięci jest, jak pokazano na poniższym rysunku.

Układ obiektu Data z pola bitowe o zerowej długości

Pole bitowe długości układu 0 obiektu Data

Podstawowy typ pola bitowe musi być typem całkowitym, jak opisano w Podstawowych typów.

Zobacz też

Informacje

Klasy, struktury i związki