Enum
はフラグを作成するためのものです。あなたが列挙型の値がバイナリに変換する場合は、より明確にそれを見ることができます。
public enum PrivilegeFlags : int
{
None = 0, //0000 0000
[EnumMember(Value = "Agent")]
Agent = 1 << 0, //0000 0001
[EnumMember(Value = "Campaign")]
Campaign = 1 << 1, //0000 0010
[EnumMember(Value = "BlackList")]
BlackList= 1 << 2, //0000 0100
All = (1 << 3) - 1 //0000 0111
}
とEnumMember
はPrivilegeFlags
enum
メンバーに割り当てられた属性です。以下のように示すように、あなたはenum
を宣言する必要はありません
は同じ列挙型である:
public enum PrivilegeFlags : int
{
None = 0, //0000 0000
[EnumMember(Value = "Agent")]
Agent = 1, //0000 0001
[EnumMember(Value = "Campaign")]
Campaign = 2, //0000 0010
[EnumMember(Value = "BlackList")]
BlackList= 4, //0000 0100
All = 7 //0000 0111
}
1 << 1
はあなたが1
の価値を持っていることを意味し、あなたは1
の値に1
のバイナリ左シフトを行います。これは明らかにバイナリレベルで見られる:
0000 0001 //1 in binary
--------- << 1 shift left by 1
0000 0010 //note the binary shift, now this is actually 2
指定左シフト<<
を使用する利点は、増分数を有するフラグ作成することである。0, 1, 2, 3, 4, ...
等代わり2^n
と0
のパターン数を有すること。 0, 1, 2, 4, 8, ...
出典
2016-05-19 10:23:51
Ian
2番目の質問は、http://stackoverflow.com/questions/2493517/what-do-two-left-angle-brackets-mean-in-cの複製です。 – StuperUser