Рассмотрим следующий битовое, который я реализовал с союзомВопросы о bitfield?
union
{
char fullByte;
struct
{
unsigned int bit0: 1;
unsigned int bit1: 1;
unsigned int bit2: 1;
unsigned int bit3: 1;
unsigned int bit4: 1;
unsigned int bit5: 1;
unsigned int bit6: 1;
unsigned int bit7: 1;
} bitField;
struct
{
unsigned int : 1;
unsigned int bit1to6 : 6;
unsigned int : 1;
} bitField2;
} bitByte;
cout << sizeof(bitByte) << endl; //prints 4
cout << sizeof(bitByte.fullByte) << endl; //prints 1
cout << sizeof(bitByte.bitField) << endl; //prints 4
cout << sizeof(bitByte.bitField2) << endl; //prints 4
Почему объединение и оба Структуры 4 байта? Я определил только 8 бит, не должен ли он быть одним байтом? Если бит равен 2 байтам по определению «unsigned int», не должно ли оно быть 16 байтов? Кажется, что любой способ мышления не работает. Почему это 4 байта?
Кроме того, я замечаю, что я не могу сделать «sizeof (bitByte.bitField.bit0)», каков был бы размер этого? Я определил его как один бит, но без знака int по 2 байта по определению. Сколько байтов будет бит0, бит1 и т. Д.?
"но без знака int по 2 байта по определению." Кто так говорит? – tkausl
@tkausl Хорошо, извините, я думаю, что допустил ошибку. unsigned int - 2 байта или 4 байта. – Thenewstockton
@Thenewstockton no, 'int' может быть 1 байт или 3, 6, 8 байт ... любые значения, если он имеет не менее 16 бит точности. [Что означает стандарт C++ для размера int, длинный тип?] (Http://stackoverflow.com/q/589575/995714). В C –