티스토리 뷰

Unity/Study

C# 열거형과 비트연산자

Kim2558 2018. 8. 30. 04:06

열거형을 사용할 때 비트연산자와 같이 사용하면 좀 더 이해하기 쉬운 코드, 간략한 코드를 작성할수 있다.

비트연산을 열거형에 사용하기 위해서는 열거형의 멤버들에게 특정 값을 대입해야 한다. 

특정 값으로는 1,2,4,8 ..  처럼 단 하나의 비트가 1 을 갖는 숫자이다.  이 숫자들을 그대로 사용하는 경우는 드물다. 좀 더 대중적인 표현으로 1 << 0, 1 << 2 , 1 << 3, 1 << 4 ... 처럼 사용된다.

위에 말했듯 단 하나의 비트가 1 을 갖는 숫자를 열거형의 멤버에게 대입해줘야 한다. 이러한 이유는 Or, And 연산을 해보면 간단히 알수 있다. 예를 들어 열거형의 멤버들이 4bit 라 가정하면 1 과 2 는 0001, 0010이 된다. 이 둘을 Or 연산하면 0011이 되고 0011 에 And 연산을 통해 1 과 2 가 존재하는 것을 알 수 있다. (0011 & 0001 = 0001 // 0011 & 0010 = 0010) 만약 3과 같은 수를 멤버에 대입하게 된다면 3은 0011이기 때문에 다른 수와 Or 연산을 했을 경우 구분을 할수 없게되는 경우가 생긴다. ( 0011 | 0001 = 0011 이 되므로 구분할 수 없다.) 

이렇듯 열거형에 비트연산을 하기 위해서는 1, 2, 4, 8 ... 과 같은 단 하나만의 비트만이 1을 갖는 수를 사용하면 된다. 

c#에서 [Flags] 라는 Attribute가 있다. 이는 다중할당된 열거형에 toString을 사용할 수 있게 해주어 디버그하기 매우 편리한 Attribute이다.



사용 예

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    [Flags]
    enum Test
    {
        FIRST = 1 << 0,
        SECOND = 1 << 1,
        THIRD = 1 << 2,
    }
    class Program
    {
        static void Main(string[] args)
        {
            Test t = Test.FIRST | Test.SECOND | Test.THIRD;
 
            Console.WriteLine(t.ToString());
 
            if ((Test.FIRST & t )!= 0 )
            {
                Console.WriteLine("FIRST 존재함.");
            }
        }
    }
cs

And, Or 말고도 다양한 비트연산을 통해 다양한 결과를 얻을수 있다. 여러 자료를 참고하며 연습해보면 좋을것 같다.

  

 


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/01   »
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
글 보관함