【C/C++】位段

零.导言

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

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


一.位段的声明

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

cpp 复制代码
//这是结构体

struct SeqList
{
    int arr*;
    int size;
    int capacity;
};

以上是结构体。

cpp 复制代码
//位段

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


相关推荐
IronMurphy7 小时前
【算法四十三】279. 完全平方数
算法
墨染天姬7 小时前
【AI】Hermes的GEPA算法
人工智能·算法
mount_myj7 小时前
长长久久【C语言】
c语言
papership7 小时前
【入门级-数据结构-3、特殊树:完全二叉树的数组表示法】
数据结构·算法·链表
smj2302_796826527 小时前
解决leetcode第3911题.移除子数组元素后第k小偶数
数据结构·python·算法·leetcode
山甫aa8 小时前
差分数组 ----- 从零开始的数据结构
数据结构
早日退休!!!8 小时前
《数据结构选型指南》笔记
数据结构·数据库·oracle
Beginner x_u8 小时前
链表专题:JS 实现原理与高频算法题总结
javascript·算法·链表
丑八怪大丑8 小时前
Java数据结构与集合源码
数据结构
c++之路9 小时前
C++信号处理
开发语言·c++·信号处理