Я экспериментировал с битовыми полями и объединениями и создал это:
union REG{
struct{
char posX: 7;
char posY: 7;
unsigned char dir: 2;
};
unsigned short reg;
};
И когда я запускаю sizeof( short )
, я получаю 2, но когда я запускаю sizeof( REG )
, я получаю 4. Это странно для меня, потому что, когда я суммирую биты, я получаю 7 + 7 + 2 = 16, то есть размер в битах 2-байтового типа данных.
В настоящее время я использую редактор Dev-C ++ с компилятором TDM-GCC 9.9.2 64-bit Debug
.
Это мой первый вопрос, поэтому, пожалуйста, скажите мне, если вам нужна дополнительная информация ... Заранее спасибо!
Редактировать: После дальнейших экспериментов я понял, что размер такой же (2 байта), когда я установил размер posX и posY на 6 бит. Но это все еще вызывает недоумение, потому что сумма составляет 14 бит, что составляет менее 2 байтов ...
Редактировать 2: Благодаря AviBerger я понял, что замена типа данных char / unsigned char на short / unsigned short результат '' 'sizeof (REG)' '' превращается в 2. Но я все еще не могу понять «Почему это происходит?»