位段的基础知识(大家都不怎么知道位段)

简介: 位段的基础知识(大家都不怎么知道位段)

对于位段的概念,想必大多数的C语言学者,都是不知道的吧!包括笔者在之前也不知道!!对于位段,还是笔者在深扒中,偶然间接触到的!!通过对位段的短暂学习,感概良多!收获满满,所以,笔者在此打算,写一遍关于位段的文章,来带领大家,了解一下位段的基础知识!!


1.什么是位段??


其实,位段是基于结构体来实现的!!


位段的声明和结构体是类似的,但是有两个不同!!


1.结构体的成员必须是:int ,unsigned ind, 或者signed int ,char 等类型,


2.位段的成员名后面有一个冒号(:)和一个数字!!


下面我们通过一个结构体与位段的代码,来带领大家走进位段!!


#include <stdio.h>
struct s
{
  int a;
  int b;
  int c;
  int d;
};
struct a
{
  int a1 : 2;
  int b1 : 5;
  int c1 : 10;
  int d1 : 30;
};
int main()
{
  printf("结构体struct s的大小为:%d\n", sizeof(struct s));
  printf("位段  struct a的大小为:%d\n", sizeof(struct a));
  return 0;
}

上面的代码的运行结构为:


0a2653c851af460fa595bd959398a8f1.png


但是,疑问随之而来!对于位段sizeof(struct a)的运行结果:为什么会是:8呢??


在这个之前,我们需要知道的是:位段的位,指的是:二进制位!!


因此,对于位段中的结构变量:int a1 : 2;  说明a1成员需要两个比特位!    int b1 : 5;  说明b1成员需要个比特位!!    int c1 : 10;  说明c1成员需要10个比特位!    int d1 : 30;  说明d1成员需要30个比特位!!则,一共需要:2+5+10+30=47个比特位,但是,一共字节,为8个比特位,所以开辟6个字节即可!但是,最后的结果却是开辟了8个字节!!这个又是为什么呢??


详解部分:


对于一个int整型,4个字节,32个比特位,在程序刚刚开始时候,a1使用了2个,结束时候,还有32-2=30个,在供b1使用,b1使用完,还剩30-5=25个比特位,在供c1使用,c1使用完,还剩余:25-10=15个比特位,但是15个比特位不够d1的30个比特位使用,故,又申请了32个比特位,供d1使用!!即,总共开辟了8个字节!!


但是,在其中,有着15个比特位不够用,然后又申请了32个比特位,其中是怎样使用的呢???


经过文献的查阅,发现:这个是不确定的,在C语言中没有明确的规定!所以,笔者也不能准确的说出来!!尴尬


相关文章
|
存储 缓存 安全
10款轻量型的嵌入式GUI库分享
10款轻量型的嵌入式GUI库分享
1201 1
|
6月前
|
NoSQL 数据库 Redis
如何保证MQ幂等性?或 如何防止消息重复消费?
如何保证MQ幂等性?或 如何防止消息重复消费?
|
存储 Oracle 关系型数据库
ORACLE 动态游标的使用
ORACLE 动态游标的使用
172 4
|
7月前
|
数据采集 Java 数据处理
Python实用技巧:轻松驾驭多线程与多进程,加速任务执行
在Python编程中,多线程和多进程是提升程序效率的关键工具。多线程适用于I/O密集型任务,如文件读写、网络请求;多进程则适合CPU密集型任务,如科学计算、图像处理。本文详细介绍这两种并发编程方式的基本用法及应用场景,并通过实例代码展示如何使用threading、multiprocessing模块及线程池、进程池来优化程序性能。结合实际案例,帮助读者掌握并发编程技巧,提高程序执行速度和资源利用率。
351 0
|
存储 人工智能 算法
量子计算:从理论走向现实的技术变革
在当今科技高速发展的时代,量子计算作为一种革命性的计算技术,逐渐从理论研究走向实用化。本文将详细探讨量子计算的基本原理、发展历程、当前进展及其在各个领域中的潜在应用。通过分析现有挑战和未来趋势,我们可以更好地理解量子计算如何改变未来科技的发展方向。
219 31
|
监控 网络协议 Unix
centos7 zabbix安装客户端agent -配置监控远程主机 在需要监控的电脑上安装
centos7 zabbix安装客户端agent -配置监控远程主机 在需要监控的电脑上安装
459 0
|
存储 C语言 Python
函数的前世今生1系列
函数的前世今生1系列
|
机器学习/深度学习 算法 Oracle
量子计算与量子密码(入门级)(下)
量子计算与量子密码(入门级)(中)
1055 0
|
存储 编解码 安全
网络设备和网络软件
网络设备和网络软件
128 0