Compartir a través de


Campos de bits de C++

Las clases y estructuras pueden contener miembros que ocupan menos almacenamiento que un tipo entero.especifican a estos miembros como campos de bits.La sintaxis de la especificación de miembro-declarante de campo de bits sigue:

declarator  : constant-expression

Comentarios

declarator (opcional) es el nombre por el que el miembro se tiene acceso en el programa.Debe ser de tipo entero (tipos enumerados incluida.la expresión constante especifica el número de bits que el miembro ocupa en la estructura.Los campos de bits anónimos (es decir, miembros de campo de bits sin identificador )se pueden utilizar para completar.

[!NOTA]

Un campo de bits sin nombre de ancho 0 fuerza la alineación de campo de bits siguiente al límite siguiente de type , donde es el tipo type miembro.

El ejemplo siguiente declara una estructura que contiene 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)
};

El diseño conceptual de memoria de un objeto de Date tipo se muestra en la ilustración siguiente.

Diseño de memoria de objeto date

Gráfico de diseño de memoria de objetos de fecha

Observe que nYear es 8 bits long y produciría el límite de palabra del tipo declarado, unsigned short.Por consiguiente, se comienza al principio de nuevo unsigned short.No es necesario que todos los campos de bits aptos en un objeto del tipo subyacente; las nuevas unidades de almacenamiento se asignan, según el número de bits solicitados en la declaración.

Específicos de Microsoft

El orden de datos declarados como campos de bits es de low alto bit, como se muestra en la ilustración anterior.

Específico de Microsoft de FINAL

Si la declaración de una estructura incluye una zona fija de longitud 0, como se muestra en el ejemplo siguiente,

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

el diseño de memoria está tal y como se muestra en la ilustración siguiente.

Diseño de objeto de fecha con el campo de bits de Zero-Length

Campo de bits de longitud 0 de disposición de objetos de fecha

El tipo de un campo de bits debe ser de tipo entero, como se describe en tipos fundamentales.

Vea también

Referencia

Clases, estructuras, uniones y