Здесь есть как минимум три проблемы.Первое (уже упомянутое) - это порядок байтов.Вторым является то, что размер bit
заканчивается.(Это будет четыре байта на многих компиляторах.) Если это больше, чем один байт, то ваш char*
не сможет получить доступ ко всем этим.И, наконец, возникает вопрос о том, как компилятор размещает биты и куда он помещает оставшиеся биты.Некоторые компиляторы начнут с их размещения из старшего бита, а другие - из младшего бита.Если компилятор использует только один 8-битовый char
для bit
, то в зависимости от порядка вы можете получить {[+ -] 4, 3 или -1, 1} или наоборот.Не говоря уже о том, что при использовании в качестве битового поля обычный int
может быть либо signed int
, либо unsigned int
(таким образом, [+ -] 4 и 3 или -1).(Во всех других контекстах обычный int
равен signed int
, и с точки зрения QoI это то, что я ожидал бы здесь, хотя бы по соображениям согласованности.)
В общем, если выЕдинственная цель состоит в том, чтобы сохранить память в структуре в памяти, битовые поля в порядке.Но они бесполезны, как только вы пытаетесь сопоставить какое-то внешнее представление.