首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >简单的C语法问题

简单的C语法问题
EN

Stack Overflow用户
提问于 2011-09-10 17:18:32
回答 3查看 243关注 0票数 1

我在我正在学习的C课程的一次旧考试中遇到了以下代码:

代码语言:javascript
代码运行次数:0
运行
复制
struct QuestionSet{
    char q1:1;
    char q2:1;
    char q3:1;
}

我不知道"char q1:1“的语法是什么意思,我在教程”C编程语言“中也找不到它。有谁能解释一下吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-10 17:21:25

这是个bitfield。冒号后面的数字指示要分配给结构元素的位数。因此,这三个元素都是一位宽的,并且能够存储两个值: 0和1或-1 (这取决于您的编译器,但在考虑二的补码运算时,-1可能是更合理的选择)。

票数 6
EN

Stack Overflow用户

发布于 2011-09-10 19:08:00

位字段通常用于微控制器编程,因为它有助于映射内存中的寄存器。例如,对于8位寄存器,如果每个位具有不同的含义/用法,则可以用以下结构表示寄存器值:

代码语言:javascript
代码运行次数:0
运行
复制
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:

代码语言:javascript
代码运行次数:0
运行
复制
the_register->enable_irq_2 = true;

它比以下代码更具可读性:

代码语言:javascript
代码运行次数:0
运行
复制
*the_register |= (1 << 2);

这并不是为了回答这个问题,而是为了帮助理解为什么位域可以是help。

票数 1
EN

Stack Overflow用户

发布于 2011-09-10 18:09:36

它看起来像是一个位字段。Example Bitfield

Bitfield在内存较小的情况下可能很有用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7370792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档