我在我正在参加的C课程的旧考试中遇到了以下代码:
struct QuestionSet{
char q1:1;
char q2:1;
char q3:1;
}
我不知道语法“char q1:1”的含义是什么,而且我无法在“C程序设计语言”中找到它,这是课本。谁能解释一下?
答案 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可能对小内存有用。