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