列舉值的組合使用

2021-07-25 06:02:11 字數 1593 閱讀 7790

有時候列舉只返回一項會顯得不夠用,比如新建乙個列舉型別week它總共有7項分別代表週日到周一,宣告乙個week型別的列舉值work用來表示乙個人的值日安排,這個人的值日安排可能不止一天,如果work的值只能為week7個列舉項中的乙個顯然是不夠用的。這時候就需要用到列舉的組合。
想要使用列舉的組合就需要知道|和||。&和&&之間的關係

「|」和「||」

「|」和「||」都可以表示邏輯或運算,不同的是做邏輯或運算時」|」會檢查每乙個條件再進入下一步,而」||」則相反,它會從左往右直到遇到條件為真就立即進入下一步。

「&」和「&&」

「&」和「&&」都可以表示邏輯與運算,不同的是做邏輯與運算時」&&」會檢查每乙個條件再進入下一步,而」&&」則相反,它會從左往右直到遇到條件為假就跳出然後進入下一步不再檢驗剩餘條件是否成立。這也是」&&「的短路功能。

ps:「&」和」|」與」&&」和」||」相比還多了位運算的功能,當&的兩邊不是布林型別時&表示按位與運算;當」|「的兩邊不是布林型別時」|「表示按位或運算。**

#include

#include

typedef

enum week week;

void printweek(week src)

; if ((src&monday) == monday)

strcat(dst, "monday ");

if ((src&tuesday) == tuesday)

strcat(dst, "tuesday ");

if ((src&wednesday) == wednesday)

strcat(dst, "thursday ");

if ((src&thursday) == thursday)

strcat(dst, "monday ");

if ((src&friday) == friday)

strcat(dst, "friday ");

if ((src&saturday) == saturday)

strcat(dst, "saturday ");

if ((src&sunday) == sunday)

strcat(dst, "sunday ");

printf("%s", dst);

};

int main()

執行結果如下:

這種組合使用是基於二進位制和位運算的原理,在定義列舉week時 每個列舉項的值都為2的次方,轉化為二進位制就會出出現只有1位為1其他位都為0的情況。這樣在兩個值為 2的不同次冪的或運算後他們各自的標誌位就會整合到一塊。再與其它列舉值做按位與就可以知道是否含有此列舉值。

使用列舉型別的值建立列舉型別

列舉型別中不僅可以宣告列舉的名稱,還可以加入附加的值如下式 public static enum pushtype public string tostring 其中push type sys稱為列舉的name,0則為列舉型別的value,那如何才能根據列舉型別的value獲取列舉型別的例項呢?見下...

列舉型別的組合

列舉的 高階用法 組合運用 例如乙個介面裡有 增 刪 查 改等操作,但對應不同使用者就有不同操作許可權。例如a使用者只能增 刪,而b使用者只能查 改等等。如果在許可權表中某乙個字段型別指定使用者的操作許可權時,問題就出來了。來看看一下3種解決方式 1.每個操作許可權一條資料,缺點 每次更改許可權時,...

darwin之列舉值得組合使用(Task)

乙個task可以有多個flag kalive 0x80000000,二進位制 1000 0000 0000 0000 0000 0000 0000 0000 kaliveoff 0x7fffffff 二進位制 0111 1111 1111 1111 1111 1111 1111 1111 getev...