美文网首页
联合体位域

联合体位域

作者: iOS之文一 | 来源:发表于2021-11-01 23:59 被阅读0次

OC底层原理探索文档汇总

联合体union的每一位表示一个信息叫做联合体位域

联合体

联合体也叫共用体,由不同的数据类型组成,其变量互斥,存储方式是所有成员共用一个段内存,共同体同一时刻只能保存一个成员的值,如果对新的成员赋值,就会将原来成员的值覆盖掉。

结构体
结构体是把不同的数据组合存储成一个整体,存储方式是所有成员组合存储,每个成员都分别占用一个内存。

联合体与结构体的区别

  • 内存占用情况
    • 结构体的各个成员会占用不同的内存,互相之间没有影响
    • 共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员
  • 内存分配大小
    • 结构体内存 >= 所有成员占用的内存总和(成员之间可能会有缝隙)
    • 共用体占用的内存等于最大的成员占用的内存

优缺点:
优点:

  • 节省空间
  • 位运算可以提高数据操作的效率

缺点:

  • 包容性弱,成员之间会相互影响

简单使用

需求: 需要记录一个车子的行驶方向,

分析:

  • 前后左右这四个方向如果分别使用bool值来存储,那么需要4个字节,总共是32个位
  • 这四个方向是互斥的,也就是一个时刻只能存储一个方位,所以可以用联合体来表示
  • 每一个值放在一个位上面,所以是4位,也就是0.5个字节(当然最少也是1个字节),就比之前省了好多空间

定义属性

属性.png

定义联合体

联合体.png

解释:

  1. union表示定义了一个联合体
  2. char bits是我们真正使用的那一段内存的表示。就是成员
    • 这里联合体的内存是一个char表示的字节
  3. struct {}说明这个字节可以用来表示什么,每个类型用哪一位来表示
    • front代表第一个位置,back代表第二个位置
    • 后面的1表示占用1位
    • 如果back写的是2,则为0001 1111
  4. 这个是联合体的名称

联合体的运算

先定义位运算的计算方式

计算方式.png

说明:

  • 如果是向前,则将1左移0位,也就是0000 0001
  • 如果是向后,则将1左移1位,也就是0000 0010
  • 如果是向左,则将1左移2位,也就是0000 0100
  • 如果是向右,则将1左移3位,也就是0000 1000

进行位运算设置(用向前来举例)

运算.png

说明:

  • |=,是取非运算符,都为0时为0,否则为1
  • LGDirectionFrontMask为0000 0001,所以可以将bits的其他位数都设置为0,只保留最后一位为1
  • 这样就可以让他代表向前

使用

使用.png

说明:

  • 可以通过LLDB来查看此时的位数上为0或1

相关文章

  • 联合体位域

    OC底层原理探索文档汇总[https://www.jianshu.com/p/04883ea4f5aa] 联合体u...

  • isa—联合体位域

    iOS是小端模式 读取的时候 一个变量一个变量从右往左读 (nonpointer:1 +has_assoc:1 +...

  • iOS底层原理探究05-类的底层原理isa链&继承链&类的内存结

    isa指向分析 通过《iOS底层原理探究04-OC对象的本质&联合体位域&isa分析》[https://www.j...

  • 三、对象原理之类绑定

    1、联合体位域 在对象原理一[https://www.jianshu.com/p/a6ed5aafeb36]的一文...

  • 公共体位域

    公共体位域. 可以用在资源较小的MCU上.节省资源.模拟寄存器或者标志位. 然后配合左移右移.提升执行效率.

  • 结构体位域

    节省空间 例如下列结构体内的变量使用了位域,占用空间只有1字节(8bit)。相对于不使用位域的缩少了3字节(24b...

  • OC对象-isa

    为什么用联合体体位域(union) ?因为它可以很大程度节省空间。举例创一个Robot类 在main文件中实现 查...

  • iOS位运算及联合体位域

    1. 概述 今天来点概念性的东西,如果在代码中用到位运算和联合体位域,是不是会显得高级一些呢?哈哈。 作为一个开发...

  • iOS底层原理-004 联合体位域

    联合体与结构体的区别 联合体(union),与结构体(struct)有极为相似的语法结构,跟struct一样可以有...

  • iOS-底层原理-联合体位域

    1.场景需求 1.假设一辆车需要控制前后左右4个方向或者一架无人机需要控制前后左右上5个方向,那么通常的做法是设置...

网友评论

      本文标题:联合体位域

      本文链接:https://www.haomeiwen.com/subject/sqkqzltx.html