iOS共用体

作者: joeal | 来源:发表于2019-07-22 20:06 被阅读4次

iOS共用体

一、何为共用体

在C语言中有union联合体/共用体。

  • union中可以定义多个成员,union的大小由最大的成员的大小决定。
  • union成员共享同一块大小的内存,一次只能使用其中的一个成员。
  • 对某一个成员赋值,会覆盖其他成员的值(也不奇怪,因为他们共享一块内存。但前提是成员所占字节数相同,当成员所占字节数不同时只会覆盖相应字节上的值,比如对char成员赋值就不会把整个int成员覆盖掉,因为char只占一个字节,而int占四个字节)
    联合体
  • union的存放顺序是所有成员都从低地址开始存放的。

二、使用共用体的好处

使代码存储数据高效率的同时,有较强的可读性,可以使用共用体来增强代码可读性,同时使用位运算来提高数据存取的效率。

OC示例可以参考这篇文档。以下是我用swift实现共用体示例。有一个Person类如果要这个类有三个属性:高否、富否、帅否。我们一般是初始化三个Bool类型属性。但是这里我们使用共用体一个属性,1个字节容量完成。三个bool值,我们只要三位bit就能完全表示了。

我们取一字节最后三位表示,低位到高位依次是:帅、富、高。定义位掩码如下:


let TallMask: UInt8         = 1<<2 // 0b00000100 4
let RichMask: UInt8         = 1<<1 // 0b00000010 2
let HandsomeMask: UInt8     = 1<<0 // 0b00000001 1
class Person {
    //bits末三位存储以上三个bool值信息
    private var bits: UInt8 = 0
    
    func setTall(_ tall: Bool) {
        if tall {
            self.bits |= TallMask
        } else {
            self.bits &= ~TallMask
        }
    }
    
    func tall() -> Bool {
        return (self.bits & TallMask) > 0 ? true : false
    }
    
    //补充setRich rich setHandsome handsome方法
    func description() {
        let t = tall()
        let r = rich()
        let h = handsome()
        debugPrint("tall: \(t) rich: \(r) handsome: \(h) bits: \(bits)")
    }
 }

tall属性如上设置和获取,rich,handsome依葫芦画瓢。

let p = Person()
p.setTall(true)
p.setRich(false)
p.setHandsome(true)
p.description()

//==========print=============
"tall: true rich: false handsome: true bits: 5"

bits值为5,转为二进制:

5
0b00000101

后三位101,对应tall=truerich=falsehandsome=true

Tips: 位运算符
  • &: 与
  • |: 或
  • !: 非
  • ~: 取反
  • ^: 异或

相关文章

  • iOS共用体

    iOS共用体 一、何为共用体 在C语言中有union联合体/共用体。 union中可以定义多个成员,union的大...

  • C语言基础 之 共用体类型

    共用体类型 共用体类型的说明和变量定义 共用体类型又称“联合类型”,简称共用体。共用体类型的说明和变量的定义方式与...

  • C语言共用体

    共用体 共用体的格式:union 共用体名称{数据类型 属性名称;数据类型 属性名称;... ...}共用体定义的...

  • C语言学习之十——共用体、枚举类型和typedef

    共用体1.1共用体的概念 :使几个不同的变量共占同一段内存的结构,称为“共用体”类型的结构。1.2 定义共用体类型...

  • 9.结构体与共用体

    1.共用体 共用体的概念 : 使几个不同的变量共占同一段内存的结构称为 “共用体”类型的结构。 定义共用体类型变量...

  • 结构体 联合体 位域

    union 共用体/联合体 结构体和共用体的区别在于:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体...

  • C语言的一些符号含义、 函数含义

    union:共用体/联合体 union 共用体名{成员列表};类似结构体,是一群变量的集合,和集合不同的是: 共用...

  • C++的共用体使用场景

    C++使用union 描述 union是C语言中一种声明共用体的数据类型,使用union声明的共用体只会占用共用体...

  • C共用体

    定义 共用体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型。您可以定义一个带有多成员的共用体,但是...

  • 共用体union

    union data{ int i; char ch; double d; }a,b,c; 将几种不同类型的变量...

网友评论

    本文标题:iOS共用体

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