简单的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可能对小内存有用。