结构体_位段

在结构体中,可以通过位段指定一个成员占多少位二进制,这样就可以最大限度地减少内存浪费;

形式为:

struct sTName{
    type val:bitNum;

};

例:

struct Ex{
    int a;
    int b:5;
    int c:9;
    int d:15;
};

但实际上Ex结构体的大小还是4个int值的大小!

无名位段

struct Ex1{
    short :3;
    short x:5;
    short :3;
    short y:5;
};

以上说明,x成员从第3位到第7位,y成员从第11位开始到第15位,而第0位到第2位及第8位到第10位的内容被忽略;

对于结构体大小的限制,由于位段的规定,在上面的这个结构体中,x,y以及分隔这两个变量所用的位段并没有超过short的大小(两个字节);所以结构体的大小为两个字节

而位段长度和结构体长度的关系也是值得记录的一个点:

对于位段长度的仔细说明:

#include <iostream>
using namespace std;


int main(){
    struct Ex1{
        short x:9;
        short y:9;
        short z:9;
    };
    struct Ex2{
        int x:9;
        int y:9;
        int z:9;
    };
    struct Ex3{
         int x:9;
         int :0;
         int z:9;
    };

    cout << sizeof(Ex1) << endl;
    cout << sizeof(Ex2) << endl;
    cout << sizeof(Ex3) << endl;
    return 0;
}

Ex1:struct Ex1的3个位段占用内存均为9位,连续两个9位超过了short类型的16位,所以占3个short那么大;

Ex2:Ex2的3个位段占27位没有超过int的大小,因此结构体也是4个字节那么大;

Ex3:Ex3在两个位段中指定了一个占0位的无名位段,所以第二三个位段在在第二个int中,则结构体共8个字节。

不能对位段成员取地址

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值