Condividi tramite


Campi di bit C++

Le classi e le strutture possono contenere membri che occupano uno spazio di archiviazione minore rispetto a un valore di tipo integrale. Questi membri vengono specificati come campi di bit. La sintassi per specificare un campo di bit del membro-dichiaratore è la seguente:

declarator  : constant-expression

Note

Il declarator (facoltativo) è il nome con cui il membro accede al programma. Deve essere un valore di tipo integrale (inclusi i tipi enumerati). L'espressione costante specifica il numero di bit che il membro occupa nella struttura. I campi di bit anonimi — cioè membri del campo di bit senza identificatore — possono essere utilizzati per la spaziatura interna.

Nota

Un campo di bit senza nome di larghezza 0 forza l'allignamento del campo di bit successivo al limite seguente type, dove type è il tipo del membro.

Nell'esempio seguente viene dichiarata una struttura contenente i campi di bit:

// 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)
};

Il layout concettuale di memoria di un oggetto di tipo Date viene illustrato nella figura seguente.

Layout a memoria fissa dell'oggetto Data

Layout della memoria di un oggetto data

Si noti che nYear è lunga 8 bit ed eccederebbe il limite della parola del tipo dichiarato unsigned short. Di conseguenza, viene inizializzata all'inizio di una nuova istanza unsigned short. Non è necessario che tutti i campi di bit si adattino ad un oggetto del tipo sottostante; le nuove unità di archiviazione vengono allocate, a seconda del numero di bit necessari per la dichiarazione.

Specifici di Microsoft

L'ordine dei dati dichiarati come campi di bit è dal bit meno significativo al più significativo, come illustrato nella figura precedente.

Specifica END Microsoft

Se la dichiarazione di una struttura include un campo senza nome di lunghezza 0, come indicato nell'esempio seguente,

// 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)
};

il layout di memoria è come illustrato nella figura seguente.

Layout dell'oggetto Data con campo bit a lunghezza 0

Layout di un oggetto data con campo di bit a lunghezza 0

Il tipo sottostante del campo di bit deve essere un valore di tipo integrate, come descritto in Tipi fondamentali.

Vedere anche

Riferimenti

Classi, strutture e unioni