C99 стандарт 6.7.2.1/10 (курсив мой):
Реализация может выделить любой адресуемый блок хранения достаточно большой, чтобы держать битовое. Если остается достаточно места, бит-поле, которое сразу следует за другим битовым полем в структуре, должно быть упаковано в соседние биты того же блока. Если недостаточно места, то будет ли бит-поле, которое не подходит, помещается в следующий блок или перекрывает смежные единицы, определяется реализацией. Порядок распределения бит-полей внутри устройства (от высокого порядка до низкого или низкого порядка) определяется реализацией. Выравнивание адресного блока хранения неуказано.
Таким образом, заказ должен быть задокументирован реализацией вашего компилятора.
Однако, насколько много реализовано битовыми полями, реализована определенная или неопределенная реализация, что использование их для моделирования битовых полей аппаратного, проводного протокола или файла в переносном режиме не стоит того, чтобы пытаться.
Если вы хотите, чтобы ваши «битовые поля», чтобы смоделировать что-то внешнее по отношению к вашей программе (как выше вещи), использовать явные маски, установку и очистку бит, используя стандартные битовые операторы (|
, "& ,
~ ,
< < `и т. Д.). Используйте вспомогательные встроенные функции (или даже макросы, если необходимо), чтобы сделать это проще и понятнее в вашем коде.
Примечание: В соответствии со стандартом, MSB не определен. На вашей конкретной платформе я подозреваю, что 'reserved' содержит MSB, но я не уверен. –
@Billy: Это похоже на ответ. –
Er ... Это довольно странный вопрос. У вас есть только 3 битовых поля в объявлении. 2 из них являются 1-битными битовыми полями, т. Е. С ними не возникает «какой конец», так как там всего 1 бит. Единственное многобитовое битовое поле под названием «зарезервировано», которое предполагает, что оно вообще не используется. Итак, в основном, единственным полем бит, к которому вы можете обратиться, является «зарезервировано». Вы спрашиваете о «зарезервированных» конкретно? Если нет, уточните свой вопрос. – AnT