高级会员

- 积分
- 750
- 金钱
- 750
- 注册时间
- 2015-3-27
- 在线时间
- 98 小时
|
发表于 2020-8-29 20:46:28
|
显示全部楼层
本帖最后由 弦子的弦 于 2020-8-30 16:11 编辑
C语言的位域是可以实现的位访问的,其语法类似于结构体,可以让你使用"."来访问指定变量的指定位域,比如flag.bit1,flag.bit2 这样的语法来访问某一个flag变量的第1,和第2位:
#include <stdio.h>
struct bits
{
unsigned char bit1:1;
unsigned char bit2:1;
unsigned char bit3:1;
unsigned char bit4:1;
unsigned char bit5:1;
unsigned char bit6:1;
unsigned char bits7:2;
};
struct bits flag;
int main(void)
{
flag.bit1 = 0;
flag.bit2 = 1;
flag.bit3 = 0;
flag.bit4 = 1;
flag.bit5 = 0;
flag.bit6 = 1;
flag.bits7 = 3;
printf("flag.bit1 = %d\nflag.bit2 = %d\nflag.bit3 = %d\nflag.bit4 = %d\nflag.bit5 = %d\nflag.bit6 = %d\nflag.bit7 = %d\n",
flag.bit1,flag.bit2,flag.bit3,flag.bit4,flag.bit5,flag.bit6,flag.bits7);
printf("flag sizof is %ld byte(s)\n",sizeof(flag));
这是一段完整的C程序,你可以编译看一下输出,除了flag.bits7 以外,其他的值只可以是0或1,因为只定义了1位,但是bits7的值可以是 0-3,因为定义的时候,他占拥了2个位。其中的bit1,bit2....bits7 都是可以自定义名称的,当然flag也可以。
根据你具体所需要表示的意义来命名就可以了。类似,flag.led,flag.button 这样就可以提高可读性了,用法也很简单,他们是可以直接被赋值和读取的.
参考:https://www.cnblogs.com/WindSun/p/11283910.html
此外,位域也可以和共同体一起使用,这样做的目的是你可以单独读写flag中8个bit的值,也可以一次性设置,这样可以简化数据的处理。
|
|