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
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
El tipo de un campo de bits debe ser de tipo entero, como se describe en tipos fundamentales.