当前位置: 首页 > news >正文

大小端模式如何影响位域中各成员的位序;位域的其他细节问题

我们直接来看图:

在上面的示意图中,我们定义了一个位域,位域中的成员

共同划分了一个uint8_t类型的内存空间,划分成了4份,

第一个位域成员占2bit,第二个位域成员占3bit,以此类推

我们都知道,大小端模式对结构体和位域中的成员的排列顺序

是没有什么影响的,但是大小端模式会影响位域中成员位序的排列

比如,看上图:在小端模式下,位域成员a的空间中,bit0(最低位)

在低地址上,bit1(比bit0稍高的位)在稍微高的地址上

再看看小端模式下的位域成员b,也是同样的道理,bit2<bit3<bit4

所以bit2排在成员b的最前面越前面地址越低

再看看大端模式下的位域成员a,bit1是高位,bit0是低位,

所以bit1就排在低地址上,bit0就排在高地址上

大端模式下的位域成员b中,bit4是最高的位,因此它排在成员b

空间中的最低位

总结一下:大小端模式不会影响位域中成员的排列顺序,因为位域中

成员的排列顺序永远都是从低地址开始,然后递增,但是大小端模式

会影响位域中各个成员位序的排列

第二部分:如何打印出来位域的值?

定义一个位域结构体,类型为bitfield_type

通过这个类型重新定义一个变量 x

给变量x中的成员a赋值为2

现在我们的目的是:想要把位域结构体X

当做是一个整型变量来打印出来

首先是取出x的首地址,将其强制类型转换成uint8_t 的类型

再进行解引用,就是x的值了

然后通过printf语句进行打印,以2位十六进制的格式进行输出,不足补零

第三部分:大小端模式对位域中的多个类型域的内存排列没有影响

在前面的博客中,我们说到了大小端模式会对位域中

各个成员的位序有影响,但是大小端模式并不会对

多个类型域的内存分布造成影响。

首先先来解释一下什么叫做类型域?

所谓的类型域,指的是位域结构体中由相同基础数据类型

(如uint8_t uint16_t 等)的位域成员组成的连续位区域

先来看一下有多个类型域的位域的定义吧

可以看到,在一个位域中,我们定义了多个类型域,

但是这些类型域的排列顺序并不会受到大小端模式的干扰

也就是说,类型域1永远在低地址上,类型域2永远在高地址上

不知道我这样说,你们明白了没有

第四部分:位域和结构体有很多相似点(可以类比)

1.位域中的成员相当于结构体中的成员变量

2.位域中的多个类型域相当于结构体中的子结构体变量,

也就是结构体的嵌套

3.位域中的成员和结构体中的成员变量都有一样

在内存中的存放顺序都是先从低地址再到高地址

最后我们来讲一下一些关于位域的细节问题:

1.位域的赋值,不要超过其位数所能够表达的数值

如int a:3最大可以赋值为7,如果超过就会截断

如果给int a:3赋值8(1000),发生截断现象,最终的结果为0

2.位域在运算时会自动升级为无符号八位整型

3.赋初值:位域的赋初值和结构体变量的赋初值相似

可以直接进行成员化赋值

好了,这就是我们这篇博客的内容,

http://www.dtcms.com/a/271870.html

相关文章:

  • k8s:安装 Helm 私有仓库ChartMuseum、helm-push插件并上传、安装Zookeeper
  • 正点原子 文件权限
  • Spring核心原理的快速入门:快速了解IoC与DI
  • RHCE考试 ——笔记
  • 【Linux手册】从接口到管理:Linux文件系统的核心操作指南
  • Redis数据安全性分析
  • PyTorch Tensor 操作入门:转换、运算、维度变换
  • 【NLP入门系列六】Word2Vec模型简介,与以《人民的名义》小说原文实践
  • IPv4和IPv6双栈配置
  • 【K8S】Kubernetes 使用 Ingress-Nginx 基于 Cookie 实现会话保持的负载均衡
  • HCIA第一次实验报告:静态路由综合实验
  • day11-微服务面试篇
  • C++11 std::is_sorted 和 std::is_sorted_until 原理解析
  • CentOs 7 MySql8.0.23之前的版本主从复制
  • 无缝矩阵与普通矩阵的对比分析
  • 中老年人的陪伴,猫咪与机器人玩具有什么区别?
  • Java 与 MySQL 性能优化:MySQL连接池参数优化与性能提升
  • MySQL(127)如何解决主从同步失败问题?
  • adb 简介与常用命令
  • 分布式ID 与自增区别
  • 虚拟储能与分布式光伏协同优化:新型电力系统的灵活性解决方案
  • 异步I/O库:libuv、libev、libevent与libeio
  • 从0到1:Python与DeepSeek的深度融合指南
  • jupyter 和 kernel 之间的关系
  • .net服务器Kestrel 与反向代理
  • 【TCP/IP】11. IP 组播
  • 【C语言】学习过程教训与经验杂谈:思想准备、知识回顾(六)
  • 【博主亲测可用】PS2025最新版:Adobe Photoshop 2025 v26.8.1 激活版(附安装教程)
  • Apache Dubbo实战:JavaSDK使用
  • 前端面试十一之TS