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