资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

关于位域在结构体的应用

关于位域在结构体的应用主要要注意内存对齐规则的理解和空域的理解
使用位域的主要目的是压缩存储,其大致规则为:
1)如果相邻位域字段的类型相同,且其位宽之和小于类型的sizeof大小,则后面的字段将紧邻前一个字段存储,直到不能容纳为止;
2)如果相邻位域字段的类型相同,但其位宽之和大于类型的sizeof大小,则后面的字段将从新的存储单元开始,其偏移量为其类型大小的整数倍;
3)如果相邻的位域字段的类型不同,则各编译器的具体实现有差异,VC6采取不压缩方式,Dev-C++采取压缩方式;
4)如果位域字段之间穿插着非位域字段,则不进行压缩;
5)整个结构体的总大小为最宽基本类型成员大小的整数倍。
例如:

你所需要的网站建设服务,我们均能行业靠前的水平为你提供.标准是产品质量的保证,主要从事成都网站设计、网站建设、企业网站建设、成都手机网站制作、网页设计、品牌网站设计、网页制作、做网站、建网站。创新互联建站拥有实力坚强的技术研发团队及素养的视觉设计专才。

#include 
int main()
{
    union
    {
        struct
        {
            unsigned short s1:3;
            unsigned short s2:3;
            unsigned short s3:3;
        }x;
        char c;
    }v;
    v.c=100;
    printf("sizeof(v)=%d\n",sizeof(v));
    printf("s1=%d\n",v.x.s1);
    printf("s2=%d\n",v.x.s2);
    printf("s3=%d\n",v.x.s3);
    return 0;
}

分析:100的二进制:0110 0100,结构体中s1,s2,s3共9位,则占用2直接,故sizeof(v)=2;对应的s1三位二进制100,s1=4;s2三位二进制100,s2=4;s3三位二进制001,s3=1。

结果:

关于位域在结构体的应用

再例如:

#include 
int main()
{
    union
    {
        struct
        {
            unsigned short s1:3;
            unsigned short s2:3;
            unsigned short s3:3;
            unsigned short s4:7;
        }x;
        char c;
    }v;
    v.c=100;
    printf("sizeof(v)=%d\n",sizeof(v));
    printf("s1=%d\n",v.x.s1);
    printf("s2=%d\n",v.x.s2);
    printf("s3=%d\n",v.x.s3);
    printf("s4=%d\n",v.x.s4);
    return 0;
}

结果:

关于位域在结构体的应用


名称栏目:关于位域在结构体的应用
标题URL:http://cdkjz.cn/article/ipojso.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

业务热线:400-028-6601 / 大客户专线   成都:13518219792   座机:028-86922220