位段的简单的讲解

目录

1.位段的形貌

2.位段的声明

3.位段的内存分配

4.注意事项


1.位段的形貌

先看以下两段代码:左边是结构体,右边就是我们要讲解的位段。可以看出位段和结构体是非常类似的,但是位段多了冒号和其后的数字。

2.位段的声明

位段的声明和结构是类似的,有两个不同:
1.位段的成员必须是int ,unsigned int, signed int 或者是 char (属于整形家族)类型
2.位段的成员名后边有一个冒号和一个数字

3.位段的内存分配

先按照结构体的内存对齐来计算一下S1的大小:如图占8个字节。

而位段的大小,计算又有所不同

1.位段成员后的数字表示了其所占的大小,单位是比特 
2. 位段的空间上是按照需要以4个字节( int )或者1个字节( char )的方式来开辟的,即每次开辟一个字节或四个字节。

 讲解:首先记住数字的单位是比特,第一个成员a2是三个比特位,此时向内存申请1个字节,要注意,(在vs中)此时这8个比特位是先用后面3个比特位(有点类似小端存储)。第二个成员b2要占4个比特位,而刚刚申请的1个字节还剩余5个比特位,刚好放下。第三个成员c2要用6个比特位,刚才那一个字节只剩余一个比特位,不够用,则会再向空间申请4个字节(要看类型申请char申请1个字节,int申请4个字节),只用掉这个4字节的6个比特位。所以S2共占个5字节。

4.注意事项

1.位段涉及很多不确定因素,位段是不跨平台的,注重可移植的程序应该避免使用位段。
2. 位段中最大位的数目不能确定。(16位机器最大16,32位机器最大32,写成27,在16位机
器会出问题。
3. 位段中的成员在内存中从左向右分配,还是从右向左分配标准尚未定义。


ok,位段的讲解就是这些了,如果觉得可以的话请务必点个赞吧!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值