uint8_t数据类型初始化

时间:2017-11-07 11:38:51

标签: c

最近我偶然发现了这样的代码:

typedef struct
{
  uint8_t TC0_WG0     :2;
  uint8_t TC0_CS      :3;
} Timer0;

我想知道的是:2;& :3;具体是什么意思?是仅访问位0,1,2还是0,1,2和2; 3只有8位无符号字符还是什么?

2 个答案:

答案 0 :(得分:1)

这些基本上是位域明确告诉TC0_CS将是3位。

这些可用于节省空间。在嵌入式系统中,我在设计中断系统时遇到过这种用法。使用位域指定特定位置作为激活停用中断的方法。

他没有访问0,1或第2位,但OP可以使用适当的位屏蔽。

答案 1 :(得分:1)

它被称为位字段成员

cppreference说:

位字段

  

声明具有显式宽度的成员,以位为单位。相邻位域   成员可能被打包以共享和跨越各个字节。

     

位字段声明是结构或联合成员声明   使用以下声明符:

identifier(optional) : width      
     

标识符 - 正在声明的位字段的名称。名称是可选的:无名的位域引入指定的数量   填充位

     

width - 一个整数常量表达式,其值大于或等于零且小于或等于底层中的位数   类型。当大于零时,这是该位的位数   场将占据。零值仅允许无名   bitfields并具有特殊含义:它指定下一位   类定义中的字段将从分配单元开始   边界。