其他分享
首页 > 其他分享> > OC笔记 - 枚举赋值时为何采用左移格式

OC笔记 - 枚举赋值时为何采用左移格式

作者:互联网

前言

1 - 我们知道 iOS枚举结构在成员赋值时往往是如下模式:赋值左移对齐

2 - 为何这般设计:方便运算

 1 #import "ViewController.h"
 2 // 枚举:按照 2^n格式赋值
 3 typedef enum{
 4     MYOptionOne   = 1,    // 0b0001   MYOptionOne    = 1 << 0
 5     MYOptionTwo   = 2,    // 0b0010   MYOptionTwo    = 1 << 1
 6     MYOptionThree = 4,    // 0b0100   MYOptionThree  = 1 << 2
 7     MYOptionFour  = 8,    // 0b1000   MYOptionFour   = 1 << 3
 8 }MYOptions;
 9 
10 @implementation ViewController
11 
12 - (void)viewDidLoad {
13     [super viewDidLoad];
14 
15     // 按位或
16     [self setOptionsA:MYOptionOne | MYOptionFour];
17     /* 位或运算
18        0001
19        1000
20        ----
21        1001
22     */
23 
24 //    // 在枚举左移对齐赋值的情况下,位或等价于加运算(不建议使用 +,完属凑巧)
25 //    [self setOptionsB:MYOptionOne + MYOptionThree];
26 }
27 
28 
29 // 把枚举结果 options同枚举成员进行位与运算,就会得到该枚举成员的值
30 - (void)setOptionsA:(MYOptions)options{
31     
32     if (options & MYOptionOne) {
33         /* 位与运算
34            1001
35            0001
36            ----
37            0001
38         */
39         NSLog(@"包含 MYOptionOne");
40     }
41     
42     if(options & MYOptionTwo){
43         /* 位与运算
44            1001
45            0010
46            ----
47            0000
48         */
49           NSLog(@"包含 MYOptionTwo");
50     }
51     
52     if(options & MYOptionThree){
53         /* 位与运算
54            1001
55            0100
56            ----
57            0000
58         */
59           NSLog(@"包含 MYOptionThree");
60     }
61     
62     if(options & MYOptionFour){
63         /* 位与运算
64            1001
65            1000
66            ----
67            1000
68         */
69           NSLog(@"包含 MYOptionFour");
70     }
71 }
72 
73 - (void)setOptionsB:(MYOptions)options{
74     
75     if (options & MYOptionOne) {
76         NSLog(@"包含 MYOptionOne");
77     }
78     
79     if(options & MYOptionTwo){
80           NSLog(@"包含 MYOptionTwo");
81     }
82     
83     if(options & MYOptionThree){
84           NSLog(@"包含 MYOptionThree");
85     }
86     
87     if(options & MYOptionFour){
88           NSLog(@"包含 MYOptionFour");
89     }
90 }
91 
92 @end

 

标签:左移,OC,枚举,MYOptionOne,为何,格式,赋值
来源: https://www.cnblogs.com/self-epoch/p/16462982.html