关于位段的问题

位段主要用于节省内存,其成员通常为整型家族成员。它们按4字节(int)或1字节(char)分配空间。然而,位段的最大位数依赖于系统,且跨平台可能存在兼容性问题。例如,在32位系统中,int类型的位段不超过32位。位段的存储方式是从右向左填充,如果下一个值无法容纳在同一字节内,会开辟新的空间。因此,位段虽节省空间,但跨平台时需谨慎使用。
摘要由CSDN通过智能技术生成

                                                                         图1

位段的作用主要是节省内存空间。

首先解释一下图1中的三个关于位段的说明

位段的成员只能是整型家族:int  \ unsigned int \ signed int 或者 char,呃,我寻思这个应该不用说。

第二个点是位段的空间上是按照四个字节(int)或者一个字节(char)开辟的  

比如说

struct A

{

int _a:2; //成员占2个bit位 , int 开辟了四个字节

};

或者

struct S

{

char a:3;//成员占3个bit位 , char 开辟了一个字节

};

哦这里说明一下,一个字节有八个比特位

然后最后一个点就是位段在不同的软件可能设置是不一样的,所以在VS平台适用的规则在别的平台不一定适用。

                                                                       图2

下面来讲一下图2关于位段跨平台问题的内容

第一个点呃大家看一下记一下。

第二个点位段最大位的数目不能确定,这个有一点抽象,比如 在32位系统中 int 类型是四个字节的,16位系统中 int 是 两个字节,那么在初始化比特位的时候 int 类型在32位系统中不能超过32个比特位,在16位系统中不能超过16个比特位。

第三个点我们举个例子

比如下图

 

  首先char类型占有一个字节,一个字节有八个比特位,所以此时我们可以放入八个比特位的内容,s.a =10,我们可以看到 char a:3;即 a 中最多存储三个比特位的数,10的比特位为1010,存储到a 开辟的一个字节中的三个比特位后变为 010 ,而且是从右向左储存,如果下一个要储存的数可以被此时 a 开辟的字节空间容纳,那么便会储存在 a 的空间中,否则就会再开辟一个字节空间进行存放, a开辟的字节的剩余空间将被废弃。

哎,这个例题好像把第四问也解决了。OKOK。

所以总结就是:位段可以节省空间,但是跨平台有风险。

上面是位段的一些运用。 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值