C语言位域

本文详细介绍了位域在C/C++编程中的概念和使用方法,通过实例展示如何定义并利用位域来高效地分配和操作寄存器中的二进制位。通过structs A-E,探讨了不同位域定义下的内存分配和成员访问,适合理解位域技巧的开发者。
摘要由CSDN通过智能技术生成

目录

一、什么是位域

二、如何定义位域


一、什么是位域

//为了操作寄存器中某些位而引入位域
    在定义结构体类型时,成员变量最小类型是char,占1个字节,但是后时候需要定义一个成员只占几个二进制位,此时需要使用位域定义成员。
    
    


二、如何定义位域

     *      位域:
     *          1,空间单位---定义的数据类型的长度为一个空间单位,计算机每次按空间单位分配空间
     *          2,每一个位域变量,空间不能跨两个空间单位,如果一个空间单位剩余的空间不够分配,则在下一个ie空间单位中分配。
     * */

    struct A{
        unsigned char a:2;    //位域成员按位分配内存空间,a占2位,b占3位
        unsigned char b:3;
    };

    struct B{
        unsigned short a:10;
        unsigned short b:7;
    };

    struct C{
        unsigned char a:3;
        unsigned char :0;  //0表示占位:将当前空间单位剩余的位全部占用
        unsigned char b:4;
    };

    struct D{
        unsigned char a:3;
        unsigned char :2;  //表示占位,占a后面的2位
        unsigned char b:2;
        unsigned char c:2;
    };

    struct E{
        unsigned char a:5;
        unsigned short b:14;  //以大类型为空间单位分配内存
    };
    int main(void)
    {
        int len;
        struct A sa;

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

        sa.a = 3;
        sa.b = 5;
        printf("sa.a = %hhd\n",sa.a);
        printf("sa.b = %hhd\n",sa.b);


        len = sizeof(struct B);
        printf("len = %d\n",len);
        len = sizeof(struct C);
        printf("len = %d\n",len);
        len = sizeof(struct D);
        printf("len = %d\n",len);
        len = sizeof(struct E);
        printf("len = %d\n",len);

        return 0;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值