C99 estándar 6.7.2.1/10 (el énfasis es mío):
Una implementación puede asignar cualquier unidad de almacenamiento direccionable lo suficientemente grande como para contener un campo de bits. Si queda suficiente espacio, un campo de bits que sigue inmediatamente a otro campo de bits en una estructura debe empaquetarse en los bits adyacentes de la misma unidad. Si queda espacio insuficiente, si un campo de bits que no encaja se coloca en la siguiente unidad o se solapa con las unidades adyacentes, se define la implementación. El orden de asignación de los campos de bits dentro de una unidad (de orden alto a orden bajo o de orden bajo a orden superior) está definido por la implementación. La alineación de la unidad de almacenamiento direccionable no está especificada.
Por lo tanto, el orden debe ser documentado por la implementación de su compilador.
Sin embargo, tanto acerca de cómo se implementan los campos de bits se ha definido o no la especificación de que usarlos para modelar hardware, protocolo de conexión o campos de formato de archivo de forma portátil no vale la pena intentarlo.
Si desea que sus 'campos de bits' para modelar algo externo a su programa (como las cosas de arriba), usan máscaras explícitos, el escenario y la limpieza de los bits mediante los operadores estándar bit a bit (|
, '& ,
~ ,
< < `, etc.). Use funciones auxiliares en línea (o incluso macros si es necesario) para hacer esto más fácil/más claro en su código.
Nota: De acuerdo con la norma, el MSB no está definido. En su plataforma específica, sospecho que 'reserved' contiene el MSB pero no estoy seguro. –
@Billy: Parece una respuesta para mí. –
Er ... Esa es una pregunta bastante extraña. Solo tiene 3 campos de bit en su declaración. 2 de ellos son campos de bits de 1 bit, es decir, no hay problema de "qué final" con ellos, ya que solo hay 1 bit allí. El único campo de bits de múltiples bits llamado 'reserved', que sugiere que no se usa en absoluto. Entonces, básicamente, el único campo de bits al que puede aplicar la pregunta es 'reservado'. ¿Estás preguntando sobre 'reservado' específicamente? Si no, aclara tu pregunta. – AnT