欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > 【C/C++】位段

【C/C++】位段

2025/2/13 10:05:20 来源:https://blog.csdn.net/bitenum/article/details/145576827  浏览:    关键词:【C/C++】位段

零.导言

        位段,对初学者来说是一个相对陌生的概念。今天,我将简单的介绍位段的概念。

先说结论:位段和结构体是类似的,并且在空间储存上战友,但同时存在难以跨平台的弊端。


一.位段的声明

        我们来简单看一下结构体和位段的区别:

//这是结构体struct SeqList
{int arr*;int size;int capacity;
};

        以上是结构体。

//位段struct A
{int _a:2;int _b:4;int _c:8;int _d:12;
};

        以上是位段。

        可以看出,结构体和位段是极为相似的,其中一个区别在于位段在变量名后加了一个冒号和一个数字,用于确定开辟的空间大小。


二.位段的内存分配

        关于位段的内存分配,有几点要特别注意,和结构体不同:

  1.          位段的成员只能是 int, unsigned int,signed int,char等类型。
  2.          位段的空间上是按照需要以4个字节(int)或者1个字节(char)的方式来开辟的
  3.          位段涉及很多不稳定因素,难以跨平台。

        从此可以看出:位段可以精细的控制变量所用空间大小,有占用空间小的优点。


三.位段的跨平台问题

  1.         int 位段被当成有符号数还是无符号数是不确定的。
     
  2.         位段中最大位的数目不能确定。(比如16位机器最大位是16,32位机器最大位是32)
     
  3.         位段中的成员在内存中从左向右分配,还是从右向左分配,标准尚未定义。
     
  4.         当一个结构包含两个位段,第二个位段成员比较大,无法容纳于第一个位段剩余的位时,是舍弃剩余的位还是利用,这是不确定的。

        综上所述:当所写程序涉及跨平台时,还是推荐使用位段而非结构体。


四.相关链接

        【C/C++】结构体的定义-CSDN博客


版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com