Compartilhar via


Campos de bits de C++

Classes e estruturas podem conter membros que ocupam menos armazenamento que tipo integral.Esses membros são especificados como campos de bits.A sintaxe para o campo de bit Declarador de membro especificação segue:

declarator  : constant-expression

Comentários

(Opcional) declarator é o nome pelo qual o membro é acessado no programa.Ele deve ser um tipo integral (incluindo os tipos enumerados).O expressão de constante Especifica o número de bits que o membro ocupa da estrutura.Campos de bits anônimo — ou seja, os membros de campo de bits sem nenhum identificador — pode ser usada para preenchimento.

ObservaçãoObservação

Um campo de bits sem nome da largura 0 força o alinhamento do próximo campo de bit para o próximo type limite, onde type é o tipo do membro.

O exemplo a seguir declara uma estrutura que contém campos de bits:

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

O layout de memória conceitual de um objeto do tipo Date é mostrado na figura a seguir.

Layout de memória do objeto Date

Gráfico de Layout de memória do objeto de data

Observe que nYear é de 8 bits de comprimento e poderia exceder o limite de palavra do tipo declarado, unsigned short.Portanto, é iniciada no início de uma nova unsigned short.Não é necessário que todos os bits de campos para caber em um objeto do tipo subjacente; novas unidades de armazenamento são alocadas, de acordo com o número de bits solicitada na declaração.

Específicos do Microsoft

A ordenação de dados declarados como campos de bits é de bits baixa a alta, como mostrado na figura acima.

Específicos do Microsoft final

Se a declaração de uma estrutura inclui um campo sem nome de comprimento 0, conforme mostrado no exemplo a seguir,

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

o layout da memória é conforme mostrado na figura a seguir.

Layout de objeto de data com o campo de bits de comprimento Zero

Campo de bits de comprimento do data objeto Layout 0

O tipo subjacente de um campo de bits deve ser um tipo integral, conforme descrito em Tipos fundamentais.

Consulte também

Referência

Classes, estruturas e uniões