본문 바로가기
게임

비트 플래그로 사용하는 열거 형식. (Flags used for the enumeration)

by 업무자동화 2016. 2. 10.
반응형

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
    }
}


위의 코드를 실행하면 아래와 같은 결과를 확인할 수 있습니다.

016.png

반응형

댓글