ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-07-10 13:05:29  阅读:175  来源: 互联网

标签:左移 OC 枚举 MYOptionOne 为何 格式 赋值


前言

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有