位域

201806078

最近需要“操作某一位”数据,开始接触位域,记录。

基础

位域声明和结构体基本一致,以下是位域的声明示例:

typedef struct __Sys_Ctrl {

    unsigned int  Rst : 1;  // bit 0

    unsigned int NotUsed : 31;  // bit 1-31

} Sys_Ctrl;

初始化操作如下:

    Sys_Ctrl sys_ctrl;
    sys_ctrl.Rst = 0;
    sys_ctrl.NotUsed = 20;
    sizeof(Sys_Ctrl);

通过sizeof(Sys_Ctrl);我们可以得到变量的大小为4字节,与unsigned int的相同,因此我们可以将该结构体赋值给unsigned int

unsigned int x = *(unsigned int*)&sys_ctrl;

姑且不管赋值之后会以何种方式解析(后续下文会谈到),我们在内存层面看到01的直接赋值。

x 变量地址

结构体地址
可见是内存的直接拷贝。最后得到的结果是2d 00 00 00按整数解析,得到45。

你可能感兴趣的:(C)