位段的跨平台问题

简介: 位段的跨平台问题

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


1.什么是位段??


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


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


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


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


简单的位段代码:


struct s
{
  char a : 3;  //3指的是:a占3个比特位
  char b : 4;
  char c : 5;
  char d : 4;
};

位段的内存分配:参考链接为:位段的内存分配_念君思宁的博客-CSDN博客


在此之前,还需要各位老铁知道一下基础知识:


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


2.位段的空间是按照需要以4个字节(int )或者1个字节(char)的方式开辟的


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


话不多说,直接进入,本篇文章的主题!


对于位段,在使用的时候,有很多的限制!就比如:这篇文章的主要讲解的:位段的跨平台问题!


1.int位段被当成有符号数,还是无符号数??是不确定的!(int 开辟的4个字节,32个比特位,但是最高位的符号位,是当做有符号数,还是无符号数来解决,这个是不确定的!)


2.位段中最大的数目是不确定的,(16位机器最大16,32位机器最大32,写成27,在16位机器会出问题)


3.位段中的成员在内存中,从左到右分配,还是从右到左分配,尚未定义!!


0a2653c851af460fa595bd959398a8f1.png


4.当一个结构体包含俩个段位成员,而第二个段位成员比较大,无法容纳于第一个位段剩余位时,是舍弃剩余的位??还是利用??这个也是不确定的!!


总结一下:


跟结构体相比,位段可以达到相同的效果,但是可以很好的节省空间,但是有跨平台的问题存在!!


相关文章
|
9月前
|
C语言
c语言位段知识详解
c语言位段知识详解
75 1
|
8月前
|
编译器 C语言 C++
C语言学习记录——位段(内存分配、位段的跨平台、位段的应用)
C语言学习记录——位段(内存分配、位段的跨平台、位段的应用)
75 0
|
8月前
|
存储 移动开发 C语言
技术心得记录:嵌入式开发中常用到的C语言库函数
技术心得记录:嵌入式开发中常用到的C语言库函数
84 1
|
9月前
|
存储 网络协议 C语言
C语言——详解位段
C语言——详解位段
77 0
C语言——详解位段
|
8月前
|
存储 编译器 C语言
C语言进阶——位段
C语言进阶——位段
56 0
|
编译器 C语言 C++
C语言之位段
C语言之位段
|
算法 C语言 C++
【C语言技能树】位段解析与应用
在结构体中会出现内存对齐的现象,有时会浪费大量的空间,为了优化这种情况,则出现了位段。
112 0
|
存储 算法 C语言
【C语言技能树】浮点数在内存中的存储
这里执行完的结果是啥呢?相信没看过相关内容前都各有各的答案,咱暂且按下不表. 接下来看看浮点数在内存中如何存储的
112 0
|
编译器 C语言 C++
C语言【位段篇】
前言:相信大家写题的时候,都会遇到这种问题:这个专业名词是什么?不知道,算了,不做了(反正也不是能力问题) 位段这个名词就很常见,接下来,砸门来聊一聊有关位段的这些事
|
存储 编译器 C语言
聊一聊C语言位域/位段
这样定义结构体变量是什么意思呢? 主要原因是:有些信息在存储时,只需占几个或一个二进制位(bit),并不需要占用一个完整的字节。例如,在存放一个开关量时,只有0和1两种状态,用一位二进位即可。为了节省存储空间,并使处理简便,C语言提供了一种数据结构,称为“位域”或“位段”。