当前位置: 首页 > article >正文

【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博客



http://www.kler.cn/a/544104.html

相关文章:

  • 在 Navicat 17 中扩展 PostgreSQL 数据类型 - 范围类型
  • json格式,curl命令,及轻量化处理工具
  • lvs的DR模式
  • 鸿蒙HarmonyOS NEXT开发:优化用户界面性能——组件复用(@Reusable装饰器)
  • pyrender 渲染报错解决
  • HCIA项目实践---网络层次常见的三种模型
  • 利用kali linux 进行自动化渗透测试
  • c#中“事件-event”的经典示例与理解
  • 如何对比Android组件快速学习鸿蒙Next开发
  • 网络安全检测思路
  • 接入 SSL 认证配置:满足等保最佳实践
  • [MySQL]3-MySQL查询性能优化
  • 浏览器自动化与AI Agent结合项目browser-use初探
  • redis 缓存击穿问题与解决方案
  • 数据守护:备份文件的重要性及自动化备份实践指南
  • GPT-SWARM和AgentVerse的拓扑结构和交互机制
  • Java面试——Tomcat
  • w~大模型~合集30
  • pdf.js默认显示侧边栏和默认手形工具
  • 【c++】四种类型转换形式
  • OpenWRT中常说的LuCI是什么——LuCI介绍(一)
  • 团结引擎高性能ECS架构(下)
  • 城电科技|海岛为什么要用智能光伏太阳花
  • Python练习11-20
  • 【机器学习】数学知识:拉格朗日对偶(Lagrange Duality)
  • Java面试突击