这是一篇学习记录笔记。。。。。。
什么是位段?
在我们开发单片机的时候,有些内核可能不支持bool变量,如果我们很多标志位都用,uchar的类型去表示,当标志位少还好,但是当标志位比较多的时候就比较占用内存了。这个我们就可以使用位段操作,这样就可以充分利用到我们的内存了。
程序设计
struct{
unsigned char SetFlag :1;
unsigned char ClrFlag :1;
unsigned char Status :6;
}bit = {1,1,10};
int main(int argc, char **argv)
{
printf("%#x,%#x,%#x\n",bit.ClrFlag,bit.Status,bit.SetFlag);
printf("size = %d",sizeof(bit));
getchar();
return 0;
}
可以看到我们定义的是一个八位的数据类型,里面存放了三个变量,每个变量占用的内存不同。
我们打印出来看一下
可以看到正确打印出了变量,并且大小也是一个字节,和我们定义的数据类型是一致的
加上联合体操作
直接改一下代码
然后运行看结果
发现我们很轻松就更改了标志位了