当前位置: 首页 > article >正文

数据结构 / 结构体位域

结构体位域充分利用把结构体字节,以bite为单位。例如:存储性别,可以使用二进制0或1表示

1. 格式

    struct 结构体位域名
    {
        数据类型 位域名:位域大小;
        ......            
    };

  • 结构体位域名:满足命名规范
  • 数据类型:不可以是float double,可以是char short int long longlong unsigned char...
  • 位域名:满足命名规范,可有可无
  • :; 均不可以省略
  • 位域大小:不允许超过数据类型的位数
struct A
        {
            char a:1;
            int b:2;        
        };

struct B
        {
            char a:3;
            int :4;   // 省略位域名,该4位不使用,默认使用0填充
            short c:5;     
        };

2. 结构体位域的大小计算

  • 总位数小于最宽成员的字节数

struct A
    {
        int a:8;
        int b:6;
        int c:2;    
    };
    // 最宽成员int,4字节,32位
    // 8+8+2<32  ,按32计算字节大小
  • 总字节超过最宽成员的字节数,变量不可以跨字节存放

    struct B
    {
        int a:20;
        int b:15;
        int c:10;    
          
    };
    // 最宽成员int,4字节,32位
    // a:20位,剩余12位,存放b空间就不够了,需要重新开辟最宽成员的字节大小,开辟32位
    // b占用15位,c占用10位,剩余7位使用0填充
    // 共8字节

  • 数据类型不一致时,以最宽成员的字节进行开辟空间

    struct C
    {     
        char a:7;
        int b:20; 
        long c:60;         //8  
        char d:5;
    };
    // 最宽成员long,8字节,64位
    // 7+20=27  64位剩余37位,不够存储c,所以重新开辟8字节的大小
    // c占60位,剩余4位,但是d占5位不够存储,重新开辟8字节存储
    // 共:24字节


http://www.kler.cn/a/146667.html

相关文章:

  • 25.<Spring博客系统②(实现JWT令牌登录接口+强制登录+获取用户信息+获取作者信息)>
  • 时序数据库TDEngine
  • JavaScript 高级—求数组的最大值与最小值
  • qt之QFTP对文件夹(含嵌套文件夹和文件)、文件删除下载功能
  • 吴恩达深度学习笔记:序列模型(Sequence Models) 1.3-1.4
  • 编译OpenCV的速度,家里和公司的电脑相差很大
  • 以太网通讯协议小结--持续更新中
  • Shell 脚本自动化备份与恢复实践
  • CSGO搬砖如何选品?选品软件和教程靠谱吗?
  • mysql 行转列 GROUP_CONCAT 试验
  • upgrade openstack from ovs to ovn (by quqi99)
  • Linux 设置文件开启数量限制
  • 8.统一异常处理 + 统一记录日志
  • 地理坐标系转换
  • 使用 .toISOString() 方法生成当前时间的ISO格式字符串,解决UTC时区差问题
  • pycharm中requirements
  • 【matlab程序】图像最大化填充画布
  • Oracle查询数据库中当前用户每个表的数据条数
  • 形态学操作—顶帽运算
  • Grafana采用Nginx反向代理,部分功能报错‘Origin not allowed’ behind proxy
  • Unity阻止射线穿透UI的方法之一
  • 欧标电动汽车充电标准CCS2
  • 简易地铁自动机售票系统实现(C++)
  • 王者荣耀小游戏
  • 数据结构 / 内存的动态申请和释放
  • AIGC创作系统ChatGPT网站源码、支持最新GPT-4-Turbo模型、GPT-4图片对话能力+搭建部署教程