それはビットごとのシフト操作です。列挙型から 1 つ以上のフラグを設定できるようにするために使用されます。この回答には適切な説明があります: なぜ C 列挙型定義の値に Bitwise-Shift 演算子を使用するのですか?
基本的には、1 つの整数に複数のフラグを格納できるようにするためのもので、2 項 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
、これは上記のシフトと同じことです。