位域

  • 一、什么是位域?
  • 二、位域定义
  • 三、例子
  • 四、什么情况下使用位域?

一、什么是位域?

因为在编程开发中,有时候不需要占用一根完整的字节,只需要使用几个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)当需要把一结构或联合映射成某预定的组织结构时。例如,当需要访问字节内的特定位时。

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

  1. C语言中结构体的位域(bit-fields)

    有些数据在存储时并不需要占用一个完整的字节,只需要占用一个或几个二进制位即可.例如开关只有通电和断电两种状态,用 0 和 1 表示足以,也就是用一个二进位.正是基于这种考虑,C语言又提供了一种叫做位域 ...

  2. C++知识点杂记3——局部类、位域、volatile、链接指示、枚举、定位new

    一.局部类 局部类就是定义在函数内部的类,因为作用域只是在函数内部,所以,所有成员定义必须完整,在Qt的源码中有几处使用了局部类,见博客https://blog.csdn.net/Master_Cui ...

  3. C 语言编程 — 高级数据类型 — 结构体与位域

    目录 文章目录 目录 前文列表 结构体 定义结构体 初始化结构体变量 访问结构体成员 结构体的内存分布 将结构体作为实参传入函数 指向结构体变量的指针 位域 定义位域 使用位域结构体的成员 前文列表 ...

  4. bool c语言_C/C++编程笔记:C语言结构体—位域,如何指定成员变量所占Bit?

    有些数据在存储时并不需要占用一个完整的字节,只需要占用一个或几个二进制位即可.比如开关只有通电和断电两种状态,用 0 和 1 表示足以,也就是用一个二进位.正是基于这种考虑,C语言又提供了一种叫做位域 ...

  5. C语言:--位域和内存对齐

    位域 位域是指信息在保存时,并不需要占用一个完整的字节,而只需要占几个或一个二进制位.为了节省空间,C语言提供了一种数据结构,叫"位域"或"位段". " ...

  6. C语言位域(位段)详解

    有些数据在存储时并不需要占用一个完整的字节,只需要占用一个或几个二进制位即可.例如开关只有通电和断电两种状态,用 0 和 1 表示足以,也就是用一个二进位.正是基于这种考虑,C语言又提供了一种叫做位域 ...

  7. C语言--- 什么是位域?

    文章目录 前言 一.什么是位域 1.定义 二.如何使用位域 前言 再一次机缘巧合的情况下,我第一次偶然的听说"位域"这个名词,当我查询了一下,发现它是一个关于C语言的知识点.并且在 ...

  8. 19_09_13 关于c语言中位域的理解

    在实际接触的C语言项目中,我们会发现很多时候都用到了位域.初次听到时可能有些模糊,但其实是很好理解的,以下是经过参考各类资料和大牛的说法后本人对位域的一些理解. 如有问题,欢迎告知,感谢之至. 1.什 ...

  9. C++:66---特殊工具与技术之(不可移植的特性:位域、volatile、extern “C“链接提示)

    为了位置底层编程,C++定义了一些固有的不可移植的特性.所谓不可移植的特性是指因机器而异的特性 当我们将含有不可移植的程序从一台机器转移到另一台机器上时,通常需要重新编写该程序.算术类型的大小在不同机 ...

  10. C++ 学习笔记之(19) new、delete表达式、RTTI(运行时类型识别)、枚举、类成员指针、嵌套类、局部类、位域、volatile、extern C

    C++ 学习笔记之(19) new.delete表达式.RTTI(运行时类型识别).枚举.类成员指针.嵌套类.局部类.位域.volatile.extern C C++ 学习笔记之(19) new.de ...

最新文章

  1. MySQL5.7的date类型_Mysql5.7 虚拟列数据类型为DATE时,如何存入数据?
  2. python 实例对象 浅拷贝_Python3 入门教程——浅拷贝深拷贝差别
  3. Python列表的切片
  4. Destroying the bus stations
  5. linux weblogic10 安装,linux 静默安装weblogic10.36
  6. 如何成为呼叫中心客服老司机
  7. java文本域 图片_java swing中给面板或者文本域设置背景图片的方法!
  8. 克罗地亚第二狂想曲难度_黄海保级难度增加,将送强力前锋去富力,与建业竞争半个降级名额...
  9. 【华为云技术分享】mongos-sharding连接池配置
  10. java gpio_单片机基础——使用GPIO输出点亮一个LED灯
  11. 树状数组相关应用之逆序对问题
  12. A joke about regular expression
  13. JAVA全栈工程师之路
  14. cdr三角形转化为圆角,CDR实现圆角多边形的三种方法
  15. Python数据分析----Python3操作Excel-以豆瓣图书Top250为例
  16. matlab中squareg,matlab中y=square(t,DUTY)的用法
  17. lstm对时间数据的预测作用(多变量对多变量预测)
  18. 东辉创投放心用姓名存钱的利害,存款一切权归吗?
  19. 八字计算方法 php,php计算四柱(生辰八字)的方法
  20. 汤因比的《历史研究》所感之一

热门文章

  1. G1垃圾回收器详细解读
  2. 深入探讨大数据权限管理方案-从哲学到技术
  3. 失落世界服务器国庆宝箱位置,失落的斯菲尔 图文攻略 全剧情任务流程全宝箱收集...
  4. PdfSharp -- 根据PDF模板导出PDF
  5. 微电影宣传片制作步骤分享。
  6. 直播预告:SIGDIAL2020最佳论文一作高信龙一评测任务导向型对话系统|AI TIME PHD对话系统专题-1...
  7. 【hadoop生态之Hbase】HBASE简介【笔记+代码】
  8. 《Netty权威指南》笔记 —— 第二十、二十一、二十二, 二十三章
  9. SSRF盲打 Collaborator everywhere
  10. 索尔维会议记录软件测试,科学史上的今天:10/30|索尔维会议创立,史上最强科学梦幻明星队...