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


相关推荐
Dovis(誓平步青云)12 分钟前
基于探索C++特殊容器类型:容器适配器+底层实现原理
开发语言·c++·queue·适配器·stack
Gyoku Mint1 小时前
深度学习×第4卷:Pytorch实战——她第一次用张量去拟合你的轨迹
人工智能·pytorch·python·深度学习·神经网络·算法·聚类
葫三生2 小时前
如何评价《论三生原理》在科技界的地位?
人工智能·算法·机器学习·数学建模·量子计算
pipip.2 小时前
UDP————套接字socket
linux·网络·c++·网络协议·udp
智者知已应修善业3 小时前
【51单片机用数码管显示流水灯的种类是按钮控制数码管加一和流水灯】2022-6-14
c语言·经验分享·笔记·单片机·嵌入式硬件·51单片机
拓端研究室4 小时前
视频讲解:门槛效应模型Threshold Effect分析数字金融指数与消费结构数据
前端·算法
随缘而动,随遇而安6 小时前
第八十八篇 大数据中的递归算法:从俄罗斯套娃到分布式计算的奇妙之旅
大数据·数据结构·算法
孞㐑¥6 小时前
Linux之Socket 编程 UDP
linux·服务器·c++·经验分享·笔记·网络协议·udp
IT古董6 小时前
【第二章:机器学习与神经网络概述】03.类算法理论与实践-(3)决策树分类器
神经网络·算法·机器学习
水木兰亭9 小时前
数据结构之——树及树的存储
数据结构·c++·学习·算法