ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

大话位段,枚举和联合体

2021-03-20 16:58:06  阅读:149  来源: 互联网

标签:成员 int bite 位段 枚举 大话 字节


大话位段,枚举和联合体

位段

定义

位段的声明和结构体是类似的,是用来节
省空间的,与数据结构有两个不同:

  1. 位段的成员是(unsignse)int或是char,
  2. 位段的成员后边有一个冒号和一个数字。
    例如:
struct A
{
  int _a:4;
  int _b:10;
  int _c:12;
  int _d:25;
};

那这时候就有人问了,那这个位段的内存是如何分配的呢,所占空间是多少呢?
这就要讲到下一个的知识点了。

位段的内存分配

首先我们要知道位段的内存分配是按照二进制来进行的,然后我们再以上面的位段来讲解,这样定义的含义。
我们先来看int _a:4;的含义,int是开辟了4个字节,也就是32个bite位,而4则是表示_a只存入这32个bite位中4个位,;以此类推,_b占10个,_c占12个,_d占25个,总共加起来是51个bite位,共占用2个字节。但是这两个字节并不是所有空间都被用到,_a,_b和_c占用一个字节浪费了6个bite位,而_d独自占用一个字节,浪费7个bite位,虽然位段比结构体节省空间,但是也会有空间的浪费,所以说位段一定程度上节省了空间。

位段的注意事项

  • int位段被当作有符号数还是无符号数是不确定的。
  • 位端最大位的数目因为编译器的不同是不固定的,所以位段存在跨平台的问题。
  • 位段中的成员在内存中是从左向右分配的,还是从右向左分配的标准尚未定义。
  • 当一个构成包含两个位段,第二个位段成员比较大,无法容纳在第一个位段剩余的位时,是否舍弃剩余的还是利用,这也是不确定的。

枚举

枚举,用意和名字一样,将所有的取值都一一列举出来。

枚举类型的定义

enum Sex
{
  MALE;
  FEMALE;
  SECRET
};

enum Sex是枚举类型。{}中的内容是枚举类型的可能取值。
这些可能值是有值的,默认的值是,从0开始。一次加1,当然也可以在定义时赋值。

enum Sex
{
  MALE=2;
  FEMALE=5;
  SECRET=10
};

联合体

联合是一种特殊的自定义类型,这中也包含一系列的成员,特点是这些成员公用一块空间

union Un
{
    char c;
    int i;
};

联合体的内存注意

因为成员公用一块空间,这样一个联合变量的大小,至少是最大成员的大小。当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。

标签:成员,int,bite,位段,枚举,大话,字节
来源: https://blog.csdn.net/weixin_52453494/article/details/115028856

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有