О членах C struct - PullRequest
       2

О членах C struct

1 голос
/ 18 ноября 2010

Я просматриваю код, написанный другими участниками, и наткнулся на код, показанный ниже:

struct myType
{
 int   myInt  : 1;
 int   reserved : 31;
};

Что такое 1 и 31 выше и когда используется обозначение выше?

Ответы [ 2 ]

4 голосов
/ 18 ноября 2010

Это битовые поля, число после двоеточия указывает ширину в битах, зарезервированную для этого поля.Они часто используются при попытке сохранить пространство или при сопоставлении внешнего (например, принадлежащего оборудованию) регистра, имеющего битовые поля.Обратите внимание, что упаковка и порядок следования байтов влияют на то, как биты размещаются в памяти, поэтому их не следует использовать, если важна переносимость.

Обратите внимание, что использование подписанных битовых полей с очень маленькими размерами - очень плохая идея., например 1. Так как для знака необходим один бит, биты не остаются для фактического значения, что, как правило, не очень хорошая ситуация.Использование unsigned int myUnsigned : 1 исправляет это.

1 голос
/ 18 ноября 2010

Это битовые поля. Этот код означает, что myInt это всего один бит, а reserved это 31 бит

Например, на моей машине

struct a
{
    int asd : 1;
    int b : 2;
};

std::cout << sizeof( a );

печатает 4 (зависит от платформы). В вашем примере точный размер структуры составляет 32 бита, но возможно, что фактический размер будет другим - зависит от выравнивания

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...