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

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


相关文章:

  • 【嵌入式】PCB电路板设计时,如何保证信号完整性?
  • LLaMA-Factory DeepSeek-R1 模型 微调基础教程
  • 基于javaweb的SpringBootoa办公自动化系统设计和实现(源码+文档+部署讲解)
  • 策略模式-小结
  • 硬盘检测利器CrystalDiskMark
  • SAP-ABAP:SAP屏幕数据的处理逻辑
  • Python 量化
  • 最新PHP盲盒商城系统源码 晒图+免签+短信验证+在线回收 ThinkPHP框架
  • linux redis ipv6、ipv4 只接收本地访问、接收本地和远程访问
  • spring6(完结)
  • 同.NET 8一起发布的C#12语法中新特性及用法演示
  • 基础算法 归并排序 #求逆序对
  • Python常见面试题的详解4
  • 【Day40 LeetCode】动态规划DP 回文子串问题
  • 如何在微信小程序中使用 Lottie 动画
  • 机器学习 网络安全
  • Hadoop 简介及其hdfs常用命令
  • LPDDR4、LPDDR5物理结构和信号定义区别
  • UniApp 的页面结构是怎样的?
  • 最新国内 ChatGPT Plus/Pro 获取教程
  • wamp 做网站发布/2023第二波疫情已经到来了吗
  • 满城住房和城乡建设局网站/百度人工智能开放平台
  • h5电子商城网站开发/百度站长统计工具
  • 科技网站模板/seo搜索引擎优化是什么意思
  • 四川网站建设seo/常见的网站推广方式有哪些
  • 大连百度快速优化排名/山东网站seo推广优化价格