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


相关推荐
Allen Wurlitzer12 分钟前
算法刷题记录——LeetCode篇(1.9) [第81~90题](持续更新)
算法·leetcode·职场和发展
@MrLiu13 分钟前
# 深度学习中的优化算法详解
人工智能·深度学习·算法·优化器
小王努力学编程13 分钟前
【Linux网络编程】UDP Echo Server的实现
linux·运维·服务器·网络·c++·学习·udp
阳洞洞16 分钟前
leetcode 377. Combination Sum IV
算法·leetcode·动态规划·完全背包问题
双叶83624 分钟前
(51单片机)串口通讯(串口通讯教程)(串口接收发送教程)
c语言·开发语言·c++·单片机·嵌入式硬件·microsoft·51单片机
阿里云云原生24 分钟前
C++ AI 通义灵码 VSCode插件安装与功能详解
c++
阿巴~阿巴~1 小时前
蓝桥杯 C/C++ 组历届真题合集速刷(一)
c语言·c++·算法·蓝桥杯
_x_w1 小时前
【12】数据结构之基于线性表的排序算法
开发语言·数据结构·笔记·python·算法·链表·排序算法
瀚海澜生1 小时前
链表系列入门指南(二):吃透这几题,链表解题不再难
后端·算法
爱编码的傅同学1 小时前
数据结构(五)——AVL树(平衡二叉搜索树)
数据结构·算法