Ответ 1
1 и 7 - размер бит, чтобы ограничить диапазон значений. Они обычно встречаются в структурах и союзах. Например, на некоторых системах (зависит от char
правил ширины и упаковки и т.д.) Код:
typedef struct {
unsigned char a : 1;
unsigned char b : 7;
} tOneAndSevenBits;
создает 8-битное значение, один бит для a
и 7 бит для b
.
Обычно используется в C для доступа к "сжатым" значениям, таким как 4-разрядный nybble, который может содержаться в верхней половине 8-разрядного char:
typedef struct {
unsigned char leftFour : 4;
unsigned char rightFour : 4;
} tTwoNybbles;
Для юристов языка среди нас раздел 9.6 стандарта С++ 11 подробно объясняет это, слегка перефразируя:
Бит-поля [class.bit]
Член-декларатор формы
идентификатор <суб > неавтоматическогосуб > атрибут спецификатор <суб > неавтоматическогосуб > : постоянное выражение
указывает бит-поле; его длина начинается с имени битового поля двоеточием. Необязательный атрибут-спецификатор относится к объявляемому объекту. Атрибут битового поля не является частью типа члена класса.
Постоянное выражение должно быть интегральным постоянным выражением со значением, большим или равным нулю. Значение интегрального выражения константы может быть больше, чем количество бит в представлении объекта типа бит-полей; в таких случаях дополнительные биты используются как биты заполнения и не участвуют в представлении значений бит-поля.
Распределение бит-полей внутри объекта класса определяется реализацией. Выравнивание битовых полей определяется реализацией. Бит-поля упаковываются в некоторые адресные единицы выделения.
Примечание: блоки выделения блоков бит на некоторых машинах, а не другие. Бит-поля назначаются справа налево на некоторых машинах, слева направо на других. - конец примечания