位段是什么玩意?你听说过吗??

当我们学完结构体之后,我们就要好好学学结构体实现位段的能力!!!

一、位段是什么?

  1. 位段的声明和结构体大体相同,但是有两点不一样。

1.位段的成员必须是int ,unsigned int ,或者 signed int。

2.位段的成员后面必须有一个冒号和一个数字。

for example

struct A
{
    int _a:2;
    int _b:5;
    int _c:10;
    int _d:30;
};

那么A就是一个位段类型,那么位段A的大小是多少呢???

printf("%d\n",sizeof(struct A));

二、位段的内存分配

1.位段的成员可以是int,unsigned int ,signed int 或者char(他也属于整形家族哦!!!)

2.位段上的内存是需要按照4个字节(int)或者1个字节(char)的方式来开辟的!

3.位段涉及很多不确定因素,位段不是跨平台的,当我们使用可移植的程序时,应该注意避免位段的使用。

 每次只会先开辟一个空间,如果不够了则会开辟下一个空间,大大节省了内存

三、位段的跨平台问题

1.int 究竟是有符号还是无符号这是不确定的。

2.位段中最大位的数目不能确定(16位,32位。。。。。)

3.位段中成员在内存从右往左,还是从左往右没有定义。

4.当结构体包含两个位段时,第二个位段成员较大,第一个位段剩余的位无法满足他时,是舍弃还是应用这是无法确定的


总结

跟结构体相比,位段可以节约很大空间,但是会有跨平台的问题存在!!!

所以在使用的时候,我们要谨慎!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值