美文网首页
位移枚举NS_OPTIONS详解

位移枚举NS_OPTIONS详解

作者: yanhooIT | 来源:发表于2018-04-11 19:02 被阅读25次

位运算知识简介

  • 按位与&
    • 对应的两个二进制位均为1时,结果位才为1,否则为0(与1相&就保持原位,与0相&就为0)
    • 举例:9&5=1
    1001&0101=0001
    
  • 按位或|
    • 对应的两个二进制位有一个为1时,结果位就为1,否则为0
    • 举例:9|5=13
    1001|0101=1101
    
  • 左移<<
    • 把一个数的各个二进位全部左移n位,左移n位其实就是乘以2的n次方
    • 规则:高位丢弃,低位补0,举例说明:当左移的运算数是int 类型时,每移动1位它的第31位就要被丢弃
    • 举例:1<<4=16
    0001<<4=1 0000
    

位移枚举定义

  • 第一个为NSUInteger这个为固定值
  • 第二个为枚举类型
typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) {
    UIViewAutoresizingNone                 = 0,
    UIViewAutoresizingFlexibleLeftMargin   = 1 << 0,
    UIViewAutoresizingFlexibleWidth        = 1 << 1,
    UIViewAutoresizingFlexibleRightMargin  = 1 << 2,
    UIViewAutoresizingFlexibleTopMargin    = 1 << 3,
    UIViewAutoresizingFlexibleHeight       = 1 << 4,
    UIViewAutoresizingFlexibleBottomMargin = 1 << 5
};

位移枚举的作用

  • 可以同时存在多个枚举值(按|计算设置,下面会解释)
  • 举例
self.view.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin
                           | UIViewAutoresizingFlexibleRightMargin
                           | UIViewAutoresizingFlexibleWidth
                           | UIViewAutoresizingFlexibleHeight;
  • 按位运算得出其本质
self.view.autoresizingMask = 1 << 0 | 1 << 2 | 1 << 1 | 1 << 4;
self.view.autoresizingMask = 0 0001 | 0 0100 | 0 0010 | 1 0000;
self.view.autoresizingMask = 0 0101 | 0 0010 | 1 0000;
self.view.autoresizingMask = 0 0111 | 1 0000;
self.view.autoresizingMask = 1 0111;
  • 多枚举配置的使用,其他配置在使用时的判断类似
// 1 0111 & 0 0001 = 0 0001,所以会指定代码逻辑1
if((self.view.autoresizingMask & UIViewAutoresizingFlexibleLeftMargin) == UIViewAutoresizingFlexibleLeftMargin) {
    // 代码逻辑1
}

// 1 0111 & 1 0000 = 1 0000,所以会指定代码逻辑2
if((self.view.autoresizingMask & UIViewAutoresizingFlexibleHeight) == UIViewAutoresizingFlexibleHeight) {
    // 代码逻辑2
}

总结

  • 设置位移枚举按位或|运算
  • 使用位移枚举按位与&运算

参考文章

相关文章

  • 位移枚举NS_OPTIONS详解

    位运算知识简介 按位与&对应的两个二进制位均为1时,结果位才为1,否则为0(与1相&就保持原位,与0相&就为0)举...

  • iOS中NS_OPTIONS 位移枚举详解

    OC中NS_OPTIONS的使用 OC 常用的枚举有两种类型,分别是 NS_ENUM 和 NS_OPTIONS ,...

  • iOS开发 枚举类型NS_ENUM和NS_OPTIONS的区别

    NS_ENUM通用枚举值 NS_OPTIONS位移相关操作的枚举值 通常情况下我们用的枚举是NS_ENUM 当一个...

  • iOS NS_OPTIONS 位移枚举

    『前言』 枚举值是一个整形(int),并且它不参与内存的占用和释放,枚举定义变量即可直接使用,不用初始化.在代码中...

  • iOS NS_OPTIONS 位移枚举

    『前言』 枚举值是一个整形(int),并且它不参与内存的占用和释放,枚举定义变量即可直接使用,不用初始化.在代码中...

  • iOS 枚举 NS_OPTIONS和enum 位移枚举和枚举

    1. NS_OPTIONS是个什么的东西 基本概念 << 位运算 2进制中所有的bit向左移动 & 运算 | 运算...

  • 位移枚举NS_OPTIONS的使用和存储

    NS_ENUM定义的枚举不能几个枚举项同时存在,只能选择其中一项 而NS_OPTIONS几个枚举项同时存在:如下 ...

  • iOS 使用位移枚举来完成多选值

    开篇用下我之前的文章里的NS_OPTIONS枚举来介绍。 这是一个NS_OPTIONS类型的枚举,从上到下的值分别...

  • 位移枚举

    位移枚举和普通枚举的区别位移枚举可以传递多个参数,普通的枚举只能传递单个参数 举个?在SDWebimage里有的地...

  • 20170317 NS_OPTIONS

    详解枚举NS_OPTIONS与NS_ENUM的区别与格式 小括号中第一个为NSUInteger这个为固定值,第二个...

网友评论

      本文标题:位移枚举NS_OPTIONS详解

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