Es un miembro bitfield. Su código significa dumpable
ocupa exactamente 1 bit en la estructura.
Los campos de bits se utilizan cuando desea empaquetar miembros en el nivel de bit. Esto puede reducir en gran medida el tamaño de la memoria utilizada cuando hay muchos indicadores en la estructura. Por ejemplo, si definimos una estructura que tiene 4 miembros con limitación numérica conocida
0 < a < 20
b in [0, 1]
0 < c < 8
0 < d < 100
entonces el struct podría ser declarado como
struct Foo {
unsigned a : 5; // 20 < 2^5 = 32
unsigned b : 1; //
unsigned c : 3; //
unsigned d : 7; // 100 < 2^7 = 128
};
entonces los bits de Foo pueden estar dispuestos como
ddddddd c cc b aaaaa
--------- --------- --------- ----------
octet 1 octet 0
===========================================
uint32
en lugar de
struct Foo {
unsigned a;
unsigned b;
unsigned c;
unsigned d;
};
en el que muchos bits se desperdicia debido a la gama de valores
# wasted space which is not used by the program
# v v
ddddddd ccc
------------------------------------ ------------------------------------
uint32 uint32
b aaaaa
------------------------------------ ------------------------------------
uint32 uint32
lo que puede ahorrar espacio por el embalaje de muchos miembros juntos.
Tenga en cuenta que el estándar C no especifica cómo se arreglan o empaquetan los campos de bits en una "unidad de almacenamiento direccionable". Además, los campos de bits son más lentos en comparación con el acceso directo de miembros.
trinary es la base tres. Querías decir ternario, y aunque es el único operador ternario, como dice John, ese no es su nombre. –
Gracias, aprecio estas correcciones. Eliminé esa línea por completo de mi pregunta porque no era relevante. – Tzafrir
Creo que la etiqueta de dos puntos debe permanecer en esta pregunta, ya que otros podrían, como yo, usar esa palabra para intentar averiguar qué significa esto antes de preguntar. – Tzafrir