简单的C语法问题

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

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

我不知道语法“char q1:1”的意思,我无法在“C语言编程语言”中找到它,这是课本。 谁有人解释一下?

这是一个位域 。 冒号后面的数字表示要分配给struct元素的位数。 因此这三个元素都是一位宽,并且能够存储两个值:0,并且1或-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); 

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

这似乎是一个位域。 比特场示例

Bitfield可能对小内存有用。