Что делает двоеточие в среднем объявлении структуры, такой как:1:7:16, или:32?

Я начал использовать насмешки через JMock, но в конечном счете перешел для использования EasyMock. EasyMock был просто, что, - легче - и обеспечил синтаксис, который чувствовал себя более естественным. Я не переключился с тех пор.

42
задан M.M 7 October 2014 в 20:50
поделиться

2 ответа

1 и 7 - это размеры в битах для ограничения диапазона значений. Обычно они встречаются в структурах и союзах. Например, в некоторых системах (зависит от ширины char и правил упаковки и т. Д.) Код:

typedef struct {
    unsigned char a : 1;
    unsigned char b : 7;
} tOneAndSevenBits;

создает 8-битное значение, один бит для a и 7 бит для b .

Обычно используется в C для доступа к «сжатым» значениям, таким как 4-битный nybble, который может содержаться в верхней половине 8-битного символа:

typedef struct {
    unsigned char leftFour  : 4;
    unsigned char rightFour : 4;
} tTwoNybbles;

Для языка юристы среди нас, раздел 9.6 стандарта C ++ 11 объясняет это подробно, слегка перефразируя:


Битовые поля [class.bit]

Член-декларатор формы

идентификатор opt спецификатор атрибута opt : константное выражение

задает битовое поле; его длина отделяется от имени битового поля двоеточием. Необязательный спецификатор атрибута относится к объявляемой сущности. Атрибут битового поля не является частью типа члена класса.

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

Распределение битовых полей внутри объекта класса определяется реализацией. Выравнивание битовых полей определяется реализацией. Битовые поля упакованы в некоторый адресный блок распределения.

Примечание: Битовые поля объединяют единицы распределения на одних машинах, но не на других. Битовые поля назначаются справа налево на одних машинах и слева направо на других. - конечное примечание

58
ответ дан 26 November 2019 в 23:49
поделиться

Я думаю, это будут битовые поля.

9
ответ дан 26 November 2019 в 23:49
поделиться