簡體   English   中英

枚舉類型的運算是什么?

[英]What is operation in enum type?

什么是:

NSStreamEventOpenCompleted = 1 << 0 ,  1 << 1  , 1 << 2 , 1 << 3 , 1 << 4 ?

在下面的示例中

typedef enum {
   NSStreamEventNone = 0,
   NSStreamEventOpenCompleted = 1 << 0,
   NSStreamEventHasBytesAvailable = 1 << 1,
   NSStreamEventHasSpaceAvailable = 1 << 2,
   NSStreamEventErrorOccurred = 1 << 3,
   NSStreamEventEndEncountered = 1 << 4
};

這是按位移位操作。 使用它可以從枚舉中設置一個或多個標志。 這個答案有一個很好的解釋: 為什么對C枚舉定義中的值使用按位移位運算符?

基本上,一個整數可以存儲多個標志,這些標志可以使用二進制AND運算符進行檢查。 枚舉值最終看起來像這樣:

typedef enum {
   NSStreamEventNone = 0,                      // 00000
   NSStreamEventOpenCompleted = 1 << 0,        // 00001
   NSStreamEventHasBytesAvailable = 1 << 1,    // 00010
   NSStreamEventHasSpaceAvailable = 1 << 2,    // 00100
   NSStreamEventErrorOccurred = 1 << 3,        // 01000
   NSStreamEventEndEncountered = 1 << 4        // 10000
};

所以你可以說:

// Set two flags with the binary OR operator
int flags =   NSStreamEventEndEncountered | NSStreamEventOpenCompleted  // 10001

if (flags & NSStreamEventEndEncountered) // true 
if (flags & NSStreamEventHasBytesAvailable) // false 

如果沒有二進制移位,則這些值可能會發生沖突或重疊,並且該技術將無效。 還可以看到枚舉得到設置為0, 1, 2, 4, 8, 16 ,這是同樣的事情如上述移位。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM