位域的概念(操作系统篇)

为什么要用位域

struct S2
{
int i;
int j;
int k;
}data;
上面就是普通的结构体,sizeof量一下空间是12byte

此时我赋值结构体
struct S2 ss={3,1,6};实际上空间都没有存放满,浪费了很多的空间。下面引出了位域

使用位域

struct S2
{
unsigned char i:2;//上述的3 占用2bit
unsigned char j:1;//上述的1占用了1bit
unsigned char k:3;//上述的6占用了3bit
}data;
此时的sizeof量一下空间就是1byte

//扩充-----------------------------------------------------------------------------------------------------------
struct S2
{
unsigned char i:3;
unsigned char j:7;//前面一个字节的8位已经用了3位还剩下5位,此时的7bit放不下了,另外从头一个字节开始
unsigned char k:1;//7bit+1bit刚好可以放下
}data;
此时的sizeof量一下空间就是2byte,
struct S2
{
unsigned int i:3;
unsigned int j:7;
unsigned int k:1;
}data;
此时的sizeof量一下空间就是4byte,

//混类型-----------------------------------------------------------------------------
struct S2
{
unsigned char i:3;
unsigned char j:4;
unsigned int k:1;//这里int是4个byte 按最长的字节进行对齐----------上面虽然占了一个字节大但是要扩充到4个byte
}data;
此时的sizeof量一下空间就是8byte,

场景

C语言底层开发会遇到,因为从最小是byte转移到了bit 内存利用的更充分

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

栋哥爱做饭

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

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

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

打赏作者

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

抵扣说明:

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

余额充值