열거형 두번째 이야기로 비트플래그에 대해서 이야기하겠습니다. 비트플래그를 이해하기 위해서는 비트에 대한 개념이 있어야 합니다.
비트플래그에서는 비트를 구성하는 0과 1을 참 거짓으로 표현하여 현재 상태를 나타내는 것입니다.
우선 0은 거짓을 표현하고 1은 참을 표현해요.
예를 들어 과일을 표현하는 enum이 있다고 하겠습니다.
public enum Fruit
{
None = 0,
Apple = 1,
Banana = 2,
Peach = 4
}
비트플래그를 위해서 항상 None이라는 것이 필요하고 0으로 설정합니다. 그리고 다음 enum부터 1, 2, 4, 8, 16이런식으로 표현합니다.
여기서 0, 1, 2, 4, 8, 16이란 숫자에 주목해야하는데요.
이 숫자를 이진수로 표현해보겠습니다.
(10) (2)
0 00000000000
1 00000000001
2 00000000010
4 00000000100
8 00000001000
16 00000010000
이제 이 숫자들이 어떤 특징이 있는지 보이시나요?
바로 이진수의 자리마다 한개의 1을 사용하고 있습니다.
잘 이해가 안가시죠? 이제 enum과 위에 숫자들을 연관시켜보겠습니다.
Peach Banana Apple
0 0 0
0 0 1
0 1 0
1 0 0
이진수 000 의 경우 십진수로 0이고 어떤 과일도 선택안된 상태인 None 입니다.
이진수 001 의 경우 십진수로 1이고 사과가 선택된 상태입니다.
이진수 010 의 경우 십진수로 2이고 바나나가 선택된 상태입니다.
이진수 100 의 경우 십진수로 4이고 복숭아가 선택된 상태입니다.
각 자리수에 0이면 선택되지 않은거고 1이면 선택된 상태가 됩니다.
따라서 110은 복숭아와 바나나가 선택된 상태가 됩니다.
코드로 보면
Fruit.Banana | Fruit.Peach 라서 쓰면
010 | 100 이라는 비트연산이 되고
연산결과는 110이됩니다. 해석하면 바나나 또는 복숭아라는 뜻이 되기에 선택한 enum에 복숭아와 바나나가 모두 선택된 뜻처럼 사용되는거죠.
참고로 enum 에서 All 을 표현하기 위해서는
~0 이라는 키워드를 사용하면 됩니다.
public enum Fruit
{
None = 0,
Apple = 1,
Banana = 2,
Peach = 4,
All = ~0,
}
}
'C# Programming' 카테고리의 다른 글
[C# Dictionary] 딕셔너리 활용법 (0) | 2019.06.29 |
---|---|
[C# 예외처리] exception, try catch finally (0) | 2019.04.28 |
[C# 논리연산] &&(AND) 와 ||(OR) 사용법 (0) | 2019.04.27 |
[C# 비트연산] AND, OR, XOR, NOT (0) | 2019.04.26 |
[C# enum 열거형] #01. enum 활용하기 (0) | 2019.04.26 |