嵌入式c语言--strcut位域

struct位域

有些信息在存储时并不需要占用一个完整的字节,而只需占一个或几个二进制位,例如在存放一个开关量时,只有 0 和 1 两种状态,用一个二进制位即可。为了节省存储空间并使处理简便,C 语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进制位划分为几个不同的区域,并说明每个区域的位数。
每个域有一个域名,允许程序按照域名进行操作,这样就可以把几个不同的对象使用一个字节的二进制位域表示。

位域的表示

struct 位域结构名
{
  位域列表;
}

例如:

struct pack
{
  unsigned char a:2;
  unsinged char b:8;
  unsigned char c:6;
}pck1,pck2;

注意:一个位域必须存储在同一个字节中,不能跨2个字节。当一个字节所剩的空间不够存放另一个位域时,应从下一个单元(下一个字节)起存放该位域,也可以有意使某位域从下一个单元开始。

struct bs
{
    unsigned char a:4;
    unsigned char :0;  //空域,第一个字节的后4位填0表示不使用
    unsigned char c:4;
    unsigned char d:4;
}bs1;

在这个位域定义中,a占第一字节的 4 位,后 4 位填 0 表示不使用,b从第二字节开始占用4 位,c占用4 位。另外,由于位域不允许跨2 个字节,因此位域的长度不能大于1 个字节的长度,也就是说不能超过 8 位二进制位。

#incldue<stdio.h>
struct pack
{
    unsigned char a:2;
    unsigned char :0;     //一个位域必须存储在同一个字节,不能跨2个字节,当1个宇节所剩空间不够存放另一拉域时,应从下一单元起存放该位域
    unsigned char b:8;
    unsigned char c:6;

}pak1;

struct bs
{
    unsigned char a:4;
    unsigned char :0;  //第一个字节的后4位填0表示不使用
    unsigned char c:4;
    unsigned char d:4;
}bs1
int main()
{
    printf("pack size:%d\n",sizeof(pak1));
    printf("pack size:%d\n",sizeof(bs1));
    return 0;
}

在这里插入图片描述
另外,位域可以定义在结构体内部使用,以节省空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发生了什么Bug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值