프로그래밍/공부

[C#] enum의 Flag 연산 정리!

docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/builtin-types/enum

 

열거형 - C# 참조

선택 또는 선택의 조합을 나타내는 C# 열거형에 대해 알아봅니다

docs.microsoft.com

 

Enumeration types (enum type)

각 비트마다 enum이 하나씩 들어가게끔 설정하여 bit array를 사용하듯 사용할 수 있다

 

열거형을 비트 필드 즉, 플래그 집합으로 처리할 수 있음을 나타내기 위해 [Flags]를 적용시킨다

 

[Flags]를 사용하면 두 속성을 하나의 변수에 담는 것이 가능해진다

 

    [Flags]
    public enum Column
    {
        None = 0,
        Up = 1 << 0,
        Down = 1 << 1,
        Left = 1 << 2,
        Right = 1 << 3,
        All = int.MaxValue
    }

 

[1] 두 속성을 하나의 변수에 담기

Column checkDirection = Column.Up | Column.Left;

 

[2] 값 추가

checkDirection |= Column.Down;

 

[3] 값 제거

checkDirection &= ~Column.Up;

 

[4] 값 반전 ( 0 -> 1 , 1 -> 0)

checkDirection ^= Column.Left;

 

[5] 모든 값 삭제

checkDirection = Column.None;

 

[6] 모든 값 설정

checkDirection = Column.All;

 

[7] 특정 값을 제외하고 모두 설정

checkDirection = Column.All ^ Column.Up ^ Column.Right;

 

[8] 값 존재 확인

if((checkDirection & Column.Up) != 0)

 

[9] 값 존재 확인 (닷넷 4.0이상에서)

if(checkDirection.HasFlag(Column.Up))

 

값이 0인 플래그는 None으로 사용하자

결과가 항상 0이라 AND 연산 등에서 비트 설정 여부를 확인할 수 있도록 돕는다