什么是位域?位域如何定义?一般什么时候使用?

一、什么是位域?

因为在编程开发中,有时候不需要占用一根完整的字节,只需要使用几个bit或者一个bit,所以使用位域就是来节省内存空间的,并且能简单处理。
例如单片机开发中的开关只有通电和断电两种状态,用 0 和 1 表示就可以了,也就是用一个二进位。基于节省内存空间的考虑,C语言提供了一种叫做位域的数据结构。

二、位域定义

允许在一个结构体中以位为单位来指定其成员长度,这种以位为单位的结构体成员称为“位段”或者“位域”。位域只能是int、unsigned int、signed int类型。int默认是有符号整型(signed)。

struct 位域结构名
{
   位域列表
}

例:

位域列表的形式:
    类型说明符  位域名:位域长度
(定义一个位域abc,包含3个位域成员a、b和c)
    struct  abc
    {
      unsigned int a:22;//占22位
      unsigned int b:11;//占11位
      unsigned int c:22;//占6位
    }data;
//data为bs变量,占用两个字节
//一个位域必须存储在同一个字节中,不能跨两个字节。如一个字节所剩空间不够存放另一位域时,应从下一单元起存放该位域。也可以有意使某位域从下一单元开始。

三、例子

例1:
在这里插入图片描述
结果:
在这里插入图片描述
m、n、p共占一个int类型,4个字节,32位

在这里插入图片描述
例2:
在这里插入图片描述
输出结果:
在这里插入图片描述
m、n、p占三个int类型,12个字节,96位
因为m+n>32,故n占下一个字节。n+p>32,p占下一个字节
在这里插入图片描述

四、什么情况下使用位域?

位域的使用主要出现在如下两种情况:
(1)当机器可用内存空间较少而使用位域可以大量节省内存时。如,当把结构作为大数组的元素时。
(2)当需要把一结构或联合映射成某预定的组织结构时。例如,当需要访问字节内的特定位时。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值