C语言 结构体Struct 中冒号的用法

本文详细介绍了C语言中位域的使用方法及注意事项,包括如何定义位域结构体、位域的存储方式以及如何给位域赋值等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C语言 结构体Struct 中冒号的用法

本文有部分内容参考菜鸟教程-C 位域

  • 关于“位域”的说明

    • 有些信息在存储时,并不需要占用一个完整的字节,而只需占几个或一个二进制位。
    • 为了节省存储空间,并使处理简便,C 语言又提供了一种数据结构,称为"位域"或"位段"。
    • 所谓"位域"是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。这样就可以把几个不同的对象用一个字节的二进制位域来表示。

  • 结构体表现形式

    struct 位域结构名 
    {
    
    	类型说明符 位域名: 位域长度
    	
    }位域结构体定义的变量;
    

  • 下面开始结合例子进行说明

    • 例子1

      struct bit_st{
          int a : 7;
          int b : 2;
          int   : 5;
          int c : 3;
      }data;
      
      • bit_st表示位域结构体,a、b、c表示对应的位域," : "后面的值为对应位域占的位长度,data表示位域结构体定义的变量。

      • 一个位域存储在同一个字节中,如一个字节所剩空间不够存放相邻下一位域时,则会从下一单元起存放该位域。也可以有意使某位域从下一单元开始。

        比如:a占7位,b占2位,那么第一字节存了a之后,剩余空间就只有1位了,不够存放b,b就要从第二个字节开始存放啦~

      • 位域可以是无名位域,这时它只用来作填充或调整位置。无名的位域是不能使用的

        比如:位域b的下一个位域是无名位域,这个无名位域占了5位,这5位填 0 表示不使用,那么第二个字节的空位就剩1位,放不下位域c,所以位域c要从第三个字节开始存放啦~

      • 由于位域不允许跨两个字节,因此位域的长度不能大于一个字节的长度,也就是说不能超过8位二进位。 如果最大长度大于计算机的整数字长,一些编译器可能会允许域的内存重叠,另外一些编译器可能会把大于一个域的部分存储在下一个字中。

      • 位域的使用和结构成员的使用相同,其一般形式为:

        比如:位域变量名.位域名

        比如:位域变量名->位域名

      • 给位域赋值(应注意赋值不能超过该位域的允许范围)

        比如:位域b占2位,那么它可被赋的最大值为3(即二进制的11)。

  • 总结

    如果看着乱可以问我~
    欢迎探讨与指正 ━ (*`∀ ´ *)ノ亻!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力的小肥丸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值