简单的C语法问题

时间:2011-09-10 09:18:32

标签: c syntax

我在我正在参加的C课程的旧考试中遇到了以下代码:

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

我不知道语法“char q1:1”的含义是什么,而且我无法在“C程序设计语言”中找到它,这是课本。谁能解释一下?

3 个答案:

答案 0 :(得分:6)

这是一个bitfield。冒号后面的数字表示要分配给struct元素的位数。因此这三个元素都是一位宽,并且能够存储两个值:0,并且1或-1(取决于您的编译器,但在考虑二进制补码算法时,-1将是更合理的选项)。 / p>

答案 1 :(得分:1)

位域通常用于微控制器编程,因为它有助于将寄存器映射到存储器中。例如,对于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);

这不是为了回答这个问题,但可能有助于理解为什么位域有用。

答案 2 :(得分:0)

这似乎是一个位域。 Example Bitfield

Bitfield可能对小内存有用。

相关问题