你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> 枚舉中的位運算學習筆記

枚舉中的位運算學習筆記

編輯:IOS開發綜合

我們常常遇到,零碎定義的枚舉中,常常遇到位運算。好像上面代碼塊中所用到的那樣(<<),位運算是怎樣運算的呢?它終究有什麼作用呢?

枚舉與位運算學習Demo鏈接

typedef NS_OPTIONS(NSUInteger, UIViewAnimationOptions) {
    UIViewAnimationOptionLayoutSubviews            = 1 <<  0,
    UIViewAnimationOptionAllowUserInteraction      = 1 <<  1, // turn on user interaction while animating
    UIViewAnimationOptionBeginFromCurrentState     = 1 <<  2, // start all views from current value, not initial value
    UIViewAnimationOptionRepeat                    = 1 <<  3, // repeat animation indefinitely
} NS_ENUM_AVAILABLE_IOS(4_0);

我們在寫枚舉參數時,可以用 | 運算符傳入多個枚舉值,比方:UIViewAnimationOptionRepeat | UIViewAnimationOptionBeginFromCurrentState。之所以可以這樣寫,是由於在定義枚舉時提供了位運算。我們經過一個Demo來看下其完成辦法

typedef enum : NSUInteger{
    /*
      first : 0 0 0 0 0 0 0 1 : 1 * 2^0 = 1
     second : 0 0 0 0 0 0 1 0 : 1 * 2^1 = 2
      third : 0 0 0 0 0 1 0 0 : 1 * 2^2 = 4
     */

    first  = 1 << 0, // 1 * 2^0 = 1
    second = 1 << 1, // 1 * 2^1 = 2
    third  = 1 << 2  // 1 * 2^2 = 4

} myEnum;

- (void)viewDidLoad {
    [super viewDidLoad];

    // 1,2,4
    NSLog(@"%d,%d,%d",first,second,third);

    [self test: first | second];
}

- (void)test:(NSInteger)count
{
     // 1 2 0
    NSLog(@"%d,%d,%d",count & first,count & second,count & third);

    if (count & first) {
        NSLog(@"first");
    }

    if (count & second) {
        NSLog(@"second");
    }

    if (count & third) {
        NSLog(@"third");
    }
}
位運算

將一個數字轉換成二進制數,枚舉中運用的是1,所以二進制數就是 0000 0001 ,將其轉換成十進制數就是 1 * 2^0 + 0 * 2 ^ 1 + 0 * 2 ^ 2 + …… ,實踐上就是 2^0 。

而位運算 1 << 1,就是 0000 0010 ,將1向左挪動1位,其後果就是 0 * 2^0 + 1 * 2^1 +……,後果是2 。同理,其它幾個後果也是這麼運算的

判別 | 運算符都傳入了哪些值

如下面的Demo所示,經過&運算符,即可判別 | 運算符都傳入了哪些值

count & first // 判別能否傳入了first,假如傳入了,值為1,否則為0
count & second // 判別能否傳入了second,假如傳入了,值為2,否則為0
count & third // 判別能否傳入了third,假如傳入了,值為4,否則為0

【枚舉中的位運算學習筆記】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved