枚舉的定義還支持位運算的方式定義,如下: 等于號后面必須等于1
typedef NS_ENUM(NSInteger, Test) {
TestA = 1, //1 1 1
TestB = 1 << 1, //2 2 10 轉(zhuǎn)換成 10進制 2
TestC = 1 << 2, //4 3 100 轉(zhuǎn)換成 10進制 4
TestD = 1 << 3, //8 4 1000 轉(zhuǎn)換成 10進制 8
TestE = 1 << 4 //16 5 10000 轉(zhuǎn)換成 10進制 16
};
什么時候要用到這種方式呢? 那就是一個枚舉變量可能要代表多個枚舉值的時候. 其實給一個枚舉變量賦予多個枚舉值的時候,原理只是把各個枚舉值加起來罷了. 當加起來以后,就獲取了一個新的值,那么為了保證這個值的唯一性,這個時候就體現(xiàn)了位運算的重要作用. 位運算可以確保枚舉值組合的唯一性. 因為位運算的計算方式是將二進制轉(zhuǎn)換成十進制,也就是說,枚舉值里面存取的是 計算后的十進制值. 打個比方: 通過上面的位運算方式設定好枚舉以后,打印出來的枚舉值分別是: 1 2 4 8 16 這5個數(shù)字,無論你如何組合在一起,也不會產(chǎn)生兩個同樣的數(shù)字.
邏輯與(&)有0則為0 1 & 0 = 0
邏輯或(|) 有1則為1 1 | 0 = 1预麸, 1 ^ 0 = 1