【iOS】位掩碼的簡易使用

在寫工具類,寫到切圓角的時候突然對UIRectCorner這個枚舉感興趣,於是研究了一下ios中的位掩碼。

實際使用的是二進制運算,所以會用到&(與運算符)、|(或運算符)、~(取反運算符)以及>>、<<(移位運算符)。

舉例定義

typedef NS_OPTIONS(NSUInteger, ZYViewFrameOption) {
    ZYViewFrameOptionX           = 1 << 0,
    ZYViewFrameOptionY           = 1 << 1,
    ZYViewFrameOptionWidth     = 1 << 2,
    ZYViewFrameOptionHeight    = 1 << 3,
};

這裏<<表示向左移位

增加一項時使用 |

self.options |= ZYViewFrameOptionX;

舉例:self.options是ZYViewFrameOptionWidth,即1<<2,0100,二進制的4。
增加一項ZYViewFrameOptionX,0001。
|或運算符兩兩相對,有1則1,無1則0。
0100
0001
計算完成是0101,二進制的5。

判斷時使用&

(self.options & ZYViewFrameOptionWidth) ==ZYViewFrameOptionWidth ;

&的用處是與運算,11得1,其餘都是0
0101
0100
計算得0100,和值相符合,表示存在。
也就是說第i位的值是

(self.options & 1<<i) == 1<<i;

同理如果判斷不存在,=0就可以。

刪除一項時使用&~

self.options &= ~ZYViewFrameOptionX;

~的用處是取反,X是0001,取反爲1110.
計算下來是0100,就是ZYViewFrameOptionWidth的值。

參考文檔在這裏
位掩碼的應用
掩碼操作
位掩碼的介紹與使用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章