TYPEDEF NS ENUM 等列舉介紹

2021-07-16 19:57:06 字數 1307 閱讀 2212

列舉其實很重要,特別是在應用開發初期,

伺服器端資料格式需要更改得情況下,列舉和巨集都能是程式簡潔,並且改動小。

首先要知道的是,

列舉值 它是乙個整形(int)

並且,它

不參加記憶體的占用和釋放

列舉定義變數即可直接使用,不用初始化.

列舉的定義如下:

typedef enum test;//列舉名稱

亦可以如下定義(推薦

:結構比較清晰):

typedef ns_enum(nsinteger,

test1

) ;列舉的定義還

支援位運算的方式定義

,如下: 等於號後面必須等於1

typedef ns_enum(nsinteger, test) ;

什麼時候要用到這種方式呢? 那就是乙個列舉變數可能要代表多個列舉值的時候. 其實給乙個列舉變數賦予多個列舉值的時候,原理只是把各個列舉值加起來罷了. 當加起來以後,就獲取了乙個新的值,那麼為了保證這個值的唯一性,這個時候就體現了位運算的重要作用. 位運算可以確保列舉值組合的唯一性. 因為位運算的計算方式是將二進位制轉換成十進位制,也就是說,列舉值裡面訪問的是 計算後的十進位制值. 打個比方: 通過上面的位運算方式設定好列舉以後,列印出來的列舉值分別是: 1 2 4 8 16 這5個數字,無論你如何組合在一起,也不會產生兩個同樣的數字.

多列舉值 賦值方式如下:

test tes = (testa|testb);

判斷列舉變數是否包含某個固定的列舉值,使用前需要確保列舉值以及各個組合的唯一性:

nslog(@」%d %d %d %d %d」,testa,testb,testc,testd,teste);

test tes = (testa|testb); nslog(@」%d」,tes);

nslog(@」%d」,(tes & testa));

if ((tes & testa)) 

else   //

nslog(@」%d」,(tes & testb));

if ((tes & testa)) 

else

//  

nslog(@」%d」,(tes & testc));

if ((tes & testc))

else

如果 沒有包含,將返回0, 0表示false no 則進入else 也可以隨時為列舉變數累加某個值,但是要自己控制不要新增已經加入過的列舉值, 列舉變數的值不會有變動,但這樣將會誤導閱讀**的人

有累加,自然有累減了,如果累減不存在的列舉值, 那麼本次累減的列舉值,會自動累加上去.

tes^= teste;  

Spring Boot Mybatis 使用列舉類

記錄一下,在實際專案引用列舉的步驟 可以參照以前我總結的部落格 為什麼要使用列舉?需要建立以下檔案 檔案描述 inte ce ienum class enumkeytypehandler 繼承 basetypehandler的自定義列舉類 class 實體bean 資料庫對應的po,將需要用列舉表示...

Algorithm Gossip 八枚銀幣

file name arithmetic.c creat data 2015.1.31 author zy algorithm gossip 八枚銀幣 現有八枚銀幣a,b,c,d,e,f,g,h,已知其中一枚是假幣,其重量不同於真幣,但不知是較輕或較重,如何使用天 平以最少的次數比較,決定出哪枚是假...

n枚硬幣問題

大致說一下問題,就是在n枚硬幣中存在乙個假幣,但不知道假幣比真幣中還是輕,你只有乙個天秤,要你用最少的比較次數找到假幣在哪。本來的思路是不斷二分,如果硬幣是偶數枚,那恰好能分成兩份,第一次分成的這兩份肯定乙份重乙份輕,並且無法判斷假幣在哪乙份裡。但如果把第乙份再二分,如果重量相等的話,假幣肯定在第一...