Udostępnij za pośrednictwem


Pola bitowe języka C++

Klasy i struktur mogą zawierać członków, którzy zajmują mniej pamięci niż typ integralny.Te elementy są określone jako pola bitowe.Składnia specyfikacji pola bitowego Deklarator członka wygląda następująco:

declarator  : constant-expression

Uwagi

(Opcjonalnie) declarator jest nazwą, za pomocą której członek jest dostępny w programie.Musi być typem całkowitym (wliczając typy wyliczane).Stała wyrażenia określa liczbę bitów członka zajmowaną w strukturze.Anonimowe pola bitowe — oznaczają, że to pole bitowe członków nie posiada identyfikatora — może być użyte do uzupełniania.

[!UWAGA]

Pole bitowe nienazwane o szerokości 0 wymusza wyrównanie pola bitowego do następnej granicy type, gdzie type jest typem członka.

Poniższy przykład pokazuje deklarację struktury, która zawiera pola bitowe:

// 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 koncepcyjny pamięci obiektu typu Date jest pokazany na poniższym rysunku.

Układ pamięci obiektu Date

Układ pamięci obiektu Data

Należy zauważyć, że nYear ma długość 8 bitów i spowodowałby przepełnienie granicy słowa deklarowanego typu liczba całkowita krótka bez znaku.W związku z tym, rozpoczęte jest to na początku nowej liczby całkowitej krótkiej bez znaku.Nie jest konieczne, aby wszystkie pola bitowe mieściły się w jeden obiekt typu podstawowego; nowe jednostki pamięci są przydzielane zgodnie z liczbą bitów wymaganych w deklaracji.

Specyficzne dla firmy Microsoft

Porządkowanie danych zadeklarowanych jako pola bitowe odbywa się od minimalnego do maksymalnego bitu, jak pokazano na powyższym rysunku.

KONIEC informacji specyficznych dla firmy Microsoft

Jeśli deklaracja struktury zawiera nienazwane pole 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 wygląda tak, jak pokazano na poniższym rysunku.

Układ obiektu Date dla pola bitowego o zerowej długości

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

Typ podstawowy pola bitowego musi być typem całkowitym, zgodnie z opisem w Podstawowych typów.

Zobacz też

Informacje

Klasy, struktury i związki