位段、枚举、联合

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公用空间证明

在这里插入图片描述
在这里插入图片描述

3.3.2利用联合的特性判定大小端

在这里插入图片描述

3.3.3内存对齐证明

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/ych9527/article/details/112058963