位段(详解)

简介: 位段又叫做位域,具体是一种可以把数据以位的形式紧凑的存储,并允许程序员对此结构位进行操作的数据结构。

1.什么是位段

位段又叫做位域,具体是一种可以把数据以位的形式紧凑的存储,并允许程序员对此结构位进行操作的数据结构。


位段的声明和结构是类似的,但该在一定程度上节省了空间,有两个不同:


1.位段的成员必须是 int、unsigned int 或signed int 。


2.位段的成员名后边有一个冒号和一个数字(数字大小不能超过对于类型大小)

image.png




这里表示,变量a只占两个比特位,变量b表示占5个比特位,变量c表示占10个比特位,变量d表示占30个比特位


2.位段的内存分配

1. 位段的成员可以是 int unsigned int signed int 或者是 char (属于整形家族)类型


2. 位段的空间上是按照需要以4个字节( int )或者1个字节( char )的方式来开辟的。(根据对应类型每次开辟4个或一个字节,当被开辟的字节空间被使用结束后,再开辟一或4个字节)


3. 位段涉及很多不确定因素,位段是不跨平台的,注重可移植的程序应该避免使用位段。


对于每个数据的具体存储在不同编译器下得到的结果是不一样的,下面是VS2013给的数据,大家可以参考参考

image.png



3.位段跨平台问题

1. int 位段被当成有符号数还是无符号数是不确定的。


2. 位段中最大位的数目不能确定。(16位机器最大16,32位机器最大32,写成27,在16位机


器会出问题。


3. 位段中的成员在内存中从左向右分配,还是从右向左分配标准尚未定义。


4. 当一个结构包含两个位段,第二个位段成员比较大,无法容纳于第一个位段剩余的位时,是


舍弃剩余的位还是利用,这是不确定的


由于位段的这些缺点,在使用位段前,大家需要考虑未来代码是否需要移植,来决定是否使用位段。


位段经常适用于IP地址的拆解中,以减少结构体占用空间较大该网络带来压力


image.png

相关文章
|
网络协议
深入理解HTTP的基础知识:请求-响应过程解析
在当今数字化的世界中,理解HTTP协议的基础知识变得至关重要。本文将带您深入探索HTTP的核心概念和请求-响应的过程。HTTP是一种用于在计算机之间传输超文本数据的协议,它不仅定义了数据交换的规则和格式,还为不同的应用程序提供了通信和交换信息的能力。通过深入了解HTTP的请求-响应过程,我们将更好地理解网络通信的基本原理,为构建和优化网络应用打下坚实的基础。
1156 2
如何在cmd中打开指定文件夹路径
如何在cmd中打开指定文件夹路径
1684 0
|
C语言
C语言结构体赋值的四种方式
本文总结了C语言结构体的四种赋值方式,并通过示例代码和编译运行结果展示了每种方式的特点和效果。
1267 6
|
算法 安全 C语言
【C 言专栏】C 语言中的多线程编程
【5月更文挑战第5天】本文探讨了C语言中的多线程编程,包括多线程概念、通过POSIX线程库和Windows线程库的实现方式、基本步骤(创建、执行、同步、销毁线程)、线程同步机制(互斥锁、条件变量、信号量)以及优点(提高性能、增强并发处理、改善用户体验)。同时,文章指出多线程编程面临的挑战如线程安全、死锁和资源竞争,并提及内存管理问题。通过案例分析和展望未来趋势,强调了掌握多线程编程在提升程序效率和应对复杂任务中的重要性。
552 0
【C 言专栏】C 语言中的多线程编程
|
存储 算法 编译器
【数据结构与算法】使用数组实现栈:原理、步骤与应用
【数据结构与算法】使用数组实现栈:原理、步骤与应用
|
存储 网络协议 C++
C++ Vector容器详解:一站式指南,掌握动态数组的高效使用
C++ Vector容器详解:一站式指南,掌握动态数组的高效使用
822 2
|
缓存 Dubbo Java
Dubbo线程模型设计解析
该文章主要介绍了Dubbo线程模型的设计解析,包括Dubbo作为一个支持大量并发请求的网络框架的特点,以及其线程模型的工作原理。
|
前端开发 安全 JavaScript
NFT数字藏品平台的基本原理和开发过程
NFT 数字藏品平台是一个数字化的收藏品交易平台,使收藏品的交易和管理更加方便和透明。为了实现数字藏品平台的功能,需要有一个稳定、可靠、高效的技术架构。本文将介绍数字藏品平台开发的技术架构,以便了解 NFT数字藏品平台的基本原理和开发过程。
|
关系型数据库 MySQL Linux
在Linux中,如何配置邮件服务器?
在Linux中,如何配置邮件服务器?
|
存储 数据库
【随手记】顺序I/O和随机I/O的定义和区别
【随手记】顺序I/O和随机I/O的定义和区别
499 1