优质作文网站,微信怎么自己创建公众号,360云盘做服务器建设网站,建造师二级报名入口本节重点内容#xff1a;  
什么是位段位段的内存分配位段的跨平台问题位段的应用⚡什么是位段 
位段的声明和结构是非常类似的#xff0c;但是有两个不同#xff1a; 
位段的成员必须是 int、unsigned int 或signed int 。位段的成员名后边有一个冒号和一个数字。
struct A…本节重点内容  
什么是位段位段的内存分配位段的跨平台问题位段的应用⚡什么是位段 
位段的声明和结构是非常类似的但是有两个不同 
位段的成员必须是 int、unsigned int 或signed int 。位段的成员名后边有一个冒号和一个数字。
struct A
{int _a:2;int _b:5;int _c:10;int _d:30;
}; 上图代码 A就是一个位段类型。那位段A的大小是多少我们继续来测试一下 
#define _CRT_SECURE_NO_WARNINGS
#include stdio.hstruct A
{int _a : 2;int _b : 5;int _c : 10;int _d : 30;
};int main()
{printf(%d\n, sizeof(struct A));return 0;
} 
代码运行结果如下 这可能与大家预期的16有一些差距那么想要真正理解位段我们就必须来学习一下位段在内存中的分配规律。 ⚡位段的内存分配 
位段的成员可以是 int、 unsigned int、 signed int 或者是 char 属于整形家族类型。位段的空间上是按照需要以4个字节 int 或者1个字节 char 的方式来开辟的。位段涉及很多不确定因素位段是不跨平台的注重可移植的程序应该避免使用位段。
举个例子#define _CRT_SECURE_NO_WARNINGS
#include stdio.hstruct S
{char a : 3;char b : 4;char c : 5;char d : 4;
};int main()
{ struct S s  { 0 };s.a  10;s.b  12;s.c  3;s.d  4;return 0;
} 在VS环境下s的位段在内存中的分配情况通过调试可得 思维图解 ⚡位段的跨平台问题 
int 位段被当成有符号数还是无符号数是不确定的。位段中最大位的数目不能确定。16位机器最大1632位机器最大32写成27在16位机器会出问题。位段中的成员在内存中从左向右分配还是从右向左分配标准尚未定义。当一个结构包含两个位段第二个位段成员比较大无法容纳于第一个位段剩余的位时是舍弃剩余的位还是利用这是不确定的。
因此可以小结跟结构相比位段可以达到同样的效果但是可以很好的节省空间但是有跨平台的问题存在。 ⚡位段的应用 
数据传输的格式封装 要是将数据包的每个部分都用int甚至是char都造成了非常大的空间浪费。因此这里我们可以通过位段来节省空间让每个部分都占据尽可能小的空间从而使整个数据包的大小变小。 
将网络想象成一个数据的高速公路如果数据都较大即便是一个较小的数据包再快它也无法越过比它大的在它前的数据包只能按照顺序一个一个进行传输。如果能够使得数据包能够尽可能地缩小那么整个网络上单位时间内传输的数据就会更多速度也会相应的加快变小意味着变快。 感谢大家能够看完这篇博客创作时长小伙伴们觉得我的博客对你有帮助不妨留下你的点赞的收藏关注我带你了解不一样的C语言。