位段的跨平台问题

举报
念君思宁 发表于 2023/02/13 13:10:56 2023/02/13
【摘要】 位段的跨平台问题

笔者在之前的两篇文章中已经详细的详解了:位段的各种问题:

 有意者请参考一下:位段的基础知识(大家都不怎么知道位段)参考链接为:位段的基础知识(大家都不怎么知道位段)_念君思宁的博客-CSDN博客

对于位段的概念,想必大多数的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.位段中的成员在内存中,从左到右分配,还是从右到左分配,尚未定义!!

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

总结一下

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。