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


相关推荐
WindSearcher8 分钟前
大模型微调相关知识
后端·算法
取酒鱼食--【余九】18 分钟前
rl_sar实现sim2real的整体思路
人工智能·笔记·算法·rl_sar
西北大程序猿42 分钟前
单例模式与锁(死锁)
linux·开发语言·c++·单例模式
彩妙不是菜喵1 小时前
算术操作符与类型转换:从基础到精通
c语言
qq_454175791 小时前
c++学习-this指针
开发语言·c++·学习
Magnum Lehar2 小时前
vulkan游戏引擎test_manager实现
java·算法·游戏引擎
水蓝烟雨2 小时前
[面试精选] 0094. 二叉树的中序遍历
算法·面试精选
超闻逸事2 小时前
【题解】[UTPC2024] C.Card Deck
c++·算法
暴力求解3 小时前
C++类和对象(上)
开发语言·c++·算法
JKHaaa3 小时前
几种简单的排序算法(C语言)
c语言·算法·排序算法