文章目录
1.位段
1.1位段的声明
1.位段的成员必须是 int, unsigned int , signed 即必须是整形家族;
这是因为位段的成员是以比特位为单位进行存储的,假如是浮点类型,给成员一个5.3的容量,0.3的比特位去哪里找呢?
2.位段的成员名后面有一个冒号和数字
3.具体声明如下:
1.2为什么要有位段
1.平时我们开辟空间都是偶数比特位,用来存储奇数就会造成一定的空间浪费,当这种数据特别多的时候,浪费的空间就会非常庞大,此时我们用位段来进行存储,就可以有效的利用空间,将奇数位段打包在一起;
2.用位段可以很方便的访问一个整形的部分内容
1.3位段的存储形式
以上述定义的位段A为例
接下来一起看看在计算机中的解释吧
1.4位段的缺点
由1.2可知我们知道了位段的优点,接下来介绍一下位段的缺点;
位段的可移植是非常差的,主要数由一下几点的原因导致:
1.整形有无符号不确定,有可能你的计算机int是有符号的,其他人的计算机是无符号的;
2.平台的不同,最大字节数可能不同,比如你的是32位计算机,别人的是16位,那么你给一个变量20个比特位的空间移植过去就会发生错误;
3.存储的方向不同,比如你的是从左至右存储,别人的是从右至左存储;
4.当存储一个成员之后,剩余的空间不足以容纳下一个成员,那么下一个成员是将剩余的空间补满再开辟新的空间,还是全部存储到新的空间里面也是不确定的;
以上四点导致了位段的可移植性非常差;
1.5知识点补充
1.位段的所有类型都一样不需要内存对齐;
2.位段是一种数据结构存储的压缩方案,只考虑空间不考虑效率
2.枚举
2.1枚举的声明
2.2枚举的使用
枚举的特性:
1.枚举常量的取值是从0开始的,往下依次递增,当然我们也可以在定义的时候进行赋值;
2.枚举是一种类型,占4个字节;
3.枚举的运用如下图所示:
2.3枚举的优点
我们知道 #define也可以定义常量,那么为什么要用枚举呢?这是因为它有如下几个优点;
1.增加代码的可读性和维护性
2.#define只是进行替换而不会进行检查,枚举有类型的检查更加的严谨
3.防止了命名的污染
4.方便调试
5.使用方便,可以一次定义多个常量
3.联合
3.1联合的定义
3.2联合的特点
1.联合的成员公用一块内存空间,因此联合变量的大小最少是最大成员的大小
2.联合需要进行内存对齐,对齐到最大对齐数的整数倍
3.联合成员都是从最低处开始读取数据
3.3实战演练
3.3.1公用空间证明