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
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
Podstawowy typ pola bitowe musi być typem całkowitym, jak opisano w Podstawowych typów.