美文网首页
IOS中的位移枚举与按位运算(OC、Swift)

IOS中的位移枚举与按位运算(OC、Swift)

作者: 我是繁星 | 来源:发表于2018-05-07 19:47 被阅读0次

    说起位移枚举,首先了解两个运算符“&”和“|”,不同于“||” “&&”
    按位与 & :顾名思义要按照对应所在的位置进行与运算,只有1&1才是1,其他都是0。
    按位或 | : 1&1 = 1 、1&0 = 1、0&0 = 0
    位移枚举的值可以是枚举中任意的“|”的值

    例如:

    MyStyle style = typeOne | typeTwo | typeThree | typeFour
    它的值就为0b1111 也就是十进制的15
    下面上代码

    typedef NS_OPTIONS(NSUInteger, MyStyle) {
        typeOne = 1 << 0,
        typeTwo = 1 << 1,
        typeThree = 1 << 2,
        typeFour = 1 << 3,
    };
    //将一个二进制数字向左移位
     typeOne 0b01
     typeTwo 0b10
     typeThree 0b100
     typeFoure 0b1000
    

    由上可知相同枚举&的时候值与原来相同
    0b10 & 0b10 还是等于 0b10

    如果两个不相同枚举&的时候等于0
    ob10 & ob01 = 0

    如果要判断是否包含这个枚举,则判断&后不为0
    (typeOne | typeTwo | typeThree | typeFour) & 0b01 = 0b01
    (typeTwo | typeThree | typeFour) & 0b01 = 0b01 = 0b00

    下面看下swift中的写法

    enum Movement3: UInt {
        case left = 0b01
        case right = 0b10
        case top = 0b100
        case bottom = 0b1000
    }
    enum Movement4 {
        case my(name:String,old:Int)
    }
    //可以通过rawValue将它的值取出来。
    let test1 = Movement1.left.rawValue
    //同样可以通过rawValue来创建一个枚举
    let test2 = Movement1.init(rawValue: 0)
    
    let test3 = Movement4.my(name: "name", old: 1)
    //由此判断
    if (Movement3.left.rawValue | Movement3.right.rawValue) & 0b01 {
    }
    

    暂未发现有其他好的写法,如有大神请多指教哦!

    相关文章

      网友评论

          本文标题:IOS中的位移枚举与按位运算(OC、Swift)

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