什么是:
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
};
答案 0 :(得分:1)
这是bitwise shift操作。它用于您可以从枚举中设置一个或多个标志。这个答案有一个很好的解释:Why use the Bitwise-Shift operator for values in a C enum definition?
基本上,一个整数可以存储多个标志,可以使用二进制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
,这与上面的转换相同。