位段的跨平台问题

简介: 位段的跨平台问题

对于位段的概念,想必大多数的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.当一个结构体包含俩个段位成员,而第二个段位成员比较大,无法容纳于第一个位段剩余位时,是舍弃剩余的位??还是利用??这个也是不确定的!!


总结一下:


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


相关文章
|
8月前
|
监控 网络协议 API
C语言系统编程
C语言系统编程
|
8月前
|
C语言
c语言位段知识详解
c语言位段知识详解
71 1
|
存储 C语言
【C语言】位段详解
【C语言】位段详解
107 0
|
7月前
|
编译器 C语言 C++
C语言学习记录——位段(内存分配、位段的跨平台、位段的应用)
C语言学习记录——位段(内存分配、位段的跨平台、位段的应用)
69 0
|
8月前
|
存储 网络协议 C语言
C语言——详解位段
C语言——详解位段
73 0
C语言——详解位段
|
7月前
|
存储 编译器 C语言
C语言进阶——位段
C语言进阶——位段
49 0
|
8月前
|
人工智能 物联网 数据处理
C语言在嵌入式系统中的应用
该文探讨了C语言在嵌入式系统中的应用,强调其优势,如可移植性、高效性、灵活性及社区支持,并列举了在RTOS开发、驱动程序、通信协议实现和简单GUI开发中的应用场景。文中通过LED闪烁程序示例展示了C语言如何控制硬件。结论指出,C语言在嵌入式系统中扮演重要角色,随着技术发展,开发者需不断学习以适应新需求。
|
8月前
|
Rust 安全 物联网
Rust在嵌入式系统中的应用:开辟安全高效的新天地
随着物联网(IoT)和嵌入式系统的快速发展,Rust编程语言正逐渐在这些领域中崭露头角。本文旨在探讨Rust为何适合嵌入式系统开发,并深入分析其在安全性、性能和内存管理方面的优势。通过几个实际应用案例,展示Rust如何助力嵌入式系统迈向更安全、更高效的未来。
|
编译器 C语言 C++
C语言之位段
C语言之位段
|
编译器 C语言 C++
C语言【位段篇】
前言:相信大家写题的时候,都会遇到这种问题:这个专业名词是什么?不知道,算了,不做了(反正也不是能力问题) 位段这个名词就很常见,接下来,砸门来聊一聊有关位段的这些事