반응형
http://ngmaster.mooo.com/ngmaster/xe/index.php?document_srl=10391&mid=COMMUNITY_Q_AND_A
안녕하세요. 소심비형입니다. 우리가 자주 사용하고 있는 열거형에 비트 플래그를 사용하는 방법입니다. 간단하게 열거형에 [Flags] 특성을 부여해주고, 각각의 열거자 목록에 값을 지정하면 됩니다. 이렇게하면 값의 조합을 저장할 수 있게 됩니다. 물론, 이 경우에도 일부 조합은 의미가 없거나 프로그램 코드에서 허용되지 않을 수도 있습니다.
비트 플래그 특성이 적용되면 AND, OR, NOT과 XOR 비트 연산을 수행할 수 있습니다. 하지만, 적절한 값을 정의하여야 하며, 비트 플래그 열거형에서 설정되지 않음을 나타내는 0값을 명명된 상수로 포함할 수 있습니다. 만약, 설정되지 않음을 표현하지 않으려면 플래그 상수에 0값을 설정하지 않아야 합니다.
아래 라인 13에 할당된 값은 15이며 바이트 값은 1111입니다. 따라서, "아이언맨, 슈퍼맨, 스파이더맨, 앤트맨"이 표시됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program { static void Main( string [] args) { int 영웅들 = 15; Console.WriteLine((Hero)영웅들); Hero 영웅 = Hero.아이언맨 | Hero.스파이더맨; Console.WriteLine(영웅 == (Hero.아이언맨 ^ Hero.스파이더맨)); Console.ReadKey(); } } [Flags] enum Hero { // 0001 (4byte) 아이언맨 = 0x1, // 0010 슈퍼맨 = 0x2, // 0100 스파이더맨 = 0x4, // 1000 앤트맨 = 0x8, // 0001 0000 (8byte) 배트맨 = 0x16, // 0010 0000 홍키통키맨 = 0x32 } } |
위의 코드를 실행하면 아래와 같은 결과를 확인할 수 있습니다.
반응형
댓글