我在我正在学习的C课程的一次旧考试中遇到了以下代码:
struct QuestionSet{
char q1:1;
char q2:1;
char q3:1;
}
我不知道"char q1:1“的语法是什么意思,我在教程”C编程语言“中也找不到它。有谁能解释一下吗?
发布于 2011-09-10 09:21:25
这是个bitfield。冒号后面的数字指示要分配给结构元素的位数。因此,这三个元素都是一位宽的,并且能够存储两个值: 0和1或-1 (这取决于您的编译器,但在考虑二的补码运算时,-1可能是更合理的选择)。
发布于 2011-09-10 11:08:00
位字段通常用于微控制器编程,因为它有助于映射内存中的寄存器。例如,对于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.
然后可以像这样启用exceptions 2:
the_register->enable_irq_2 = true;
它比以下代码更具可读性:
*the_register |= (1 << 2);
这并不是为了回答这个问题,而是为了帮助理解为什么位域可以是help。
发布于 2011-09-10 10:09:36
它看起来像是一个位字段。Example Bitfield
Bitfield在内存较小的情况下可能很有用。
https://stackoverflow.com/questions/7370792
复制