티스토리 뷰
열거형을 사용할 때 비트연산자와 같이 사용하면 좀 더 이해하기 쉬운 코드, 간략한 코드를 작성할수 있다.
비트연산을 열거형에 사용하기 위해서는 열거형의 멤버들에게 특정 값을 대입해야 한다.
특정 값으로는 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 말고도 다양한 비트연산을 통해 다양한 결과를 얻을수 있다. 여러 자료를 참고하며 연습해보면 좋을것 같다.
'Unity > Study' 카테고리의 다른 글
[Unity] 두 점 사이의 각도 구하기 (1) | 2019.02.26 |
---|---|
Unity(안드로이드)와 Firebase Database 연동 (0) | 2018.09.07 |
자식 Transform 가져오기 [Unity] (0) | 2018.07.07 |
[Unity] Transform 이 성능에 미치는 영향 (0) | 2018.07.05 |
[Unity] 옵저버 패턴 (0) | 2018.07.04 |