В C ++, что является правильным термином для разбиения int на биты - PullRequest
2 голосов
/ 10 февраля 2011

Я вижу в некоторых кодах C ++ такие вещи, как:

// Header
struct SomeStruct {
    uint32_t nibble1:4, bitField1:1, bitField2:1, bitField3:1, bitField4:1,
             padding:11, field5Bits:5, byteField:8;
};

Как это называется? Обычно мне нравится гуглить, прежде чем спрашивать здесь, но я понятия не имею, что даже вводить. Я надеюсь понять это, когда дело доходит до порядка байтов - нужно ли рассматривать битовый порядок или просто порядок байтов? Кроме того, каков тип каждого поля - bitFieldX должен быть логическим, а field5Bits должен быть uint8_t. По крайней мере, я так думаю.

Спасибо.

Ответы [ 3 ]

6 голосов
/ 10 февраля 2011
  1. Они называются битовыми полями ( MSVC ) ( GCC )
  2. Порядковый номер обычно относится к порядку байтов.Однако порядок битов может быть важен, см. Ссылки выше.
  3. Они ведут себя как unsigned int (uint32_t) в вашем случае.
1 голос
/ 10 февраля 2011

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

Поскольку существуетв списке указан только один тип, каждый член структуры имеет одинаковый тип, uint_32.

Endianess имеет значение для Anthing, который является частью типа данных, который больше 1 байта.

1 голос
/ 10 февраля 2011

Обычно термин для выбора нескольких битов из большего двоичного целочисленного представления составляет маскирование .

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