目录

  • 1. 什么是位段
  • 2. 位段的内存分配

1. 什么是位段

结构体中可以位为单位来指定其成员所占内存长度,这种以位为单位的成员称为“位段”或“位域”( bit field) 。利用位段能够用较少的位数存储数据。

位段的好处:

  • 位段可以使数据单元节省储存空间
  • 位段可以很方便的访问一个整数值的部分内容从而可以简化程序源代码

此外

  • 位段是定义在结构体中的
  • 位段成员数据类型可以是 int, unsigned int, signed int, char, unsigned char, signed char 类型
  • 位段空间是按需以4个(int型)或1个(char型)字节来开辟的
  • 位段不可跨平台,所以可移植的程序应避免使用位段
struct A
{int _a : 2;int _b : 3;char c : 1;char d : 4;
};

2. 位段的内存分配

对于下面这个结构体中的位段

struct S
{char a : 3;char b : 4;char c : 5;char d : 4;
};

内存分配图如下(VS环境)

 
 
注意:

  • 这里位段类型为char,所以当比特位不够时每次补充一个字节的空间
  • 位段存在跨平台的问题,当一个位段成员存储后的空余空间无法完整容纳下一个位段成员时,是将空余内存空间舍弃还是利用,是不确定的
  • 并且位段成员的内存是从左向右还是从右向左分配也是不确定的

与结构体将比,位段能够更大限度的节约内存空间,但是存在跨平台问题, 需谨慎使用。

练习:

unsigned char puc[4];struct tagPIM{unsigned char n;unsigned char a : 1;unsigned char b : 2;unsigned char c : 3;}*pstPimData;pstPimData = (struct tagPIM*)puc;memset(puc,0,4);pstPimData->n = 2; pstPimData->a = 3;pstPimData->b = 4;pstPimData->c = 5;printf("%02x %02x %02x %02x\n",puc[0], puc[1], puc[2], puc[3]);

vs环境下其内存分布分析

%02x 以16进制位打印,打印两位,不够两位用0填充
(%2x 以16进制位打印,打印两位,不够两位用空格填充)
即打印结果为 02 29 00 00

【C语言】位段(详解)相关推荐

  1. python语言编程基础-Python语言入门详解!快速学成Python!

    原标题:Python语言入门详解!快速学成Python! 很多技能是被职场所需要的,但很可惜... 这些技能在大学中并学习不到. 大学和职场现实存在的横沟对大部分同学来说难以跨越或碰得头破血流... ...

  2. python语言入门m-Python语言入门详解!快速学成Python!

    今日主题 "Python语言入门详解" 近两年来,Python语言借着数据科学和人工智能的"东风"成为了最流行的编程语言--街头巷尾人们口口相传.同时,Pyth ...

  3. C语言之详解#ifdef等宏

    C语言之详解#ifdef等宏 这几个宏是为了进行条件编译.一般情况下,源程序中所有的行都参加编译.但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是&qu ...

  4. c语言 宏教程 pdf,C语言之详解_ifdef等宏.pdf

    C 语言之详解 #ifdef 等宏 指令用途 #空指令,无任何效果 #include 包含一个源代码文件 #define 定义宏 #undef 取消已定义的宏 #if 如果给定条件为真,则编译下面代码 ...

  5. 代码检查规则:Python语言案例详解

    在之前的文章中代码检查规则:Java语言案例详解学习了Java的检查规则.我们今天将学习<代码检查规则:Python语言案例详解>,内容主要分为两个部分:Python的代码检查规则和Pyt ...

  6. 代码检查规则:Java语言案例详解

    本节课程为<代码检查规则:Java语言案例详解>, 通常情况下Java的代码检查规则可以分为以下十类: 接下来,让我们具体来看看每个分类的内容. 一.源文件规范 该类规范主要从文件名.文件 ...

  7. Linux_arm_启动_c语言部分详解,[原创]Linux arm 启动 c语言部分详解第四讲

    Linux arm启动c语言部分详解第四讲(from setup_per_cpu_areas();) Written by leeming 上面的setup_arch花了我们大量的篇幅,现在我们要继续 ...

  8. c 语言中 %是什么运算符,C 语言基础----详解C中的运算符

    C语言中又有哪些运算符呢? 如下所示: ※ 算术运算符 ※ 赋值运算符 ※ 关系运算符 ※ 逻辑运算符 ※ 三目运算符 C语言基本算术运算符如下表: 除法运算中注意: 如果相除的两个数都是整数的话,则 ...

  9. python切片输出_Python语言之详解切片

    本篇文章主要讲述Python语言之详解切片,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入. 切片操作就是对list,元组,字符串进行截取操作有了切片操作,很多地方循环就不再需要了 ...

  10. c语言的指针详解ppt,最全的C语言指针详解.ppt

    最全的C语言指针详解.ppt 第6章 指针,6.1 指针定义与使用 6.2 指针与函数 6.3 指针与数组 6.4 指针与字符串 6.5 指针数组与多级指针 6.6 指针与动态内存分配 6.7 指针的 ...

最新文章

  1. 面试官问:BitMap了解么?在什么场景下用过?碰到过什么问题?
  2. 一只53万!波士顿动力网红机器狗开售,充电器价格1万多!
  3. Windows系统下的 vbs病毒生成器使用方法!
  4. 用leangoo看板工具做可视化工作流
  5. java面向对象编程集合边框_Java学习系列(七)Java面向对象之集合框架详解(上)
  6. Hinton神经网络公开课编程练习3 Optimization and generalization
  7. ORACLE数据库的连接
  8. spark 把一列数据合并_Spark DataFrame列的合并与拆分
  9. 阿里云宣布与Facebook达成合作 让AI开发更简单
  10. GDAL库读取Envisat ASAR数据
  11. 管家婆显示服务器没有加密狗,管家婆软件阿拉丁狗找不到加密狗
  12. java 影院订票系统 影院售票系统 在线电影订票平台 jsp ssm
  13. 华为网络安全工程师:HCNA-Security(H12-711)题型解析(第一部分)-马青-专题视频课程...
  14. 7号信令基本概念和术语
  15. selenium模拟登录163邮箱
  16. The North American Invitational Programming Contest 2016 I-Tourists
  17. iphone开发笔记一 mac os 10.7.2安装与配置
  18. 学生用计算机怎么玩俄罗斯方块,计算机专业项目二 俄罗斯方块
  19. [安装之1] dell设置从ssd启动_如何进bios设置ssd固态硬盘为第一启动
  20. 听见丨苹果申请自主导航系统专利,自动驾驶汽车梦再近一步 现代打造更聪明、实用汽车AI语音系统

热门文章

  1. gitbash EndNote Snipaste Wox+Everything 火狐 火绒浏览器 Bandizip
  2. 2022-2028全球pH控制剂行业调研及趋势分析报告
  3. leetcode1083. 销售分析 II(SQL必会呀)
  4. 《游戏机制——高级游戏设计技术》一2.4 渐进型游戏
  5. 2023初级会计详细学习计划打卡表!自律逆袭,一次上岸!
  6. 电感耦合等离子体光源(ICP)
  7. 长沙理工大学本科毕业论文答辩和论文选题PPT模板
  8. css3动画数字变化,css3动画的更深层次的探究(矩阵变换)
  9. ping命令 ——测试主机间网络连通性
  10. bugkuctf 游戏通关玄学式速通