[英]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.