Простой синтаксис C Вопрос - PullRequest
       0

Простой синтаксис C Вопрос

1 голос
/ 10 сентября 2011

Я наткнулся на следующий код в старом экзамене по курсу C, который я беру:

struct QuestionSet{
    char q1:1;
    char q2:1;
    char q3:1;
}

Я понятия не имею, что означает синтаксис "char q1: 1", и я не смог найти его нигде в "Языке программирования C", который является учебником. Кто-нибудь может объяснить?

Ответы [ 3 ]

6 голосов
/ 10 сентября 2011

Это битовое поле .Число после двоеточия указывает количество битов, назначаемых элементу структуры.Таким образом, все три элемента имеют ширину в один бит и могут хранить два значения: 0 и либо 1, либо -1 (в зависимости от вашего компилятора, хотя -1 будет более логичным вариантом при рассмотрении арифметики с двумя дополнениями).

1 голос
/ 10 сентября 2011

Битовые поля часто используются при программировании микроконтроллеров, потому что это помогает отображать регистры в памяти. Например, для 8-битного регистра, если каждый бит имеет различное значение / использование, можно представить значение регистра в виде структуры:

struct exception_register
{
    bool enable_irq_0: 1;
    bool enable_irq_1: 1;
    bool enable_irq_2: 1;
    bool enable_irq_3: 1;
    bool irq_flag_0: 1;
    bool irq_flag_1: 1;
    bool irq_flag_2: 1;
    bool irq_flag_3: 1;
};

byte* the_register = 0x1234; // where 0x1234 is the address of the register in memory.

Тогда включение исключений 2 можно сделать так:

the_register->enable_irq_2 = true;

Что более читабельно, чем:

*the_register |= (1 << 2);

Это не предназначено для ответа на вопрос, но может помочь понять, почему битовые поля могут быть полезны.

0 голосов
/ 10 сентября 2011

Кажется, это битовое поле. Пример битового поля

Битовое поле может быть полезно для небольшой памяти.

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