GPG 1.10간단하고 빠른 비트 배열<br />Devrookie, http://cafe.naver.com/devrookie<br />박민근<br />
비트단위 연산을 빠르고 유용하게 사용할 수 있는 비트 배열 클래스의 소개 및 사용<br />
비트단위 <br />연산이란?<br />
  0과 1로 이루어진 <br />1비트 값들의 배열을<br /> 일종의 플래그(true/false)<br />의 집합으로 사용하는 <br />자료 구조 테크닉<br />
복수개의 플래그를 <br />설정할 때 주로 <br />유용하게 사용된다.<br />
충돌 체크 유무<br />알파 블렌딩 체크 <br />컬링 제외<br />픽킹 제외<br />높이 체크 유무<br />기타 등등... 쓸때는 졸라 많다.<br />
기본적인 비트<br />단위연산<br />
비트 플래그의 정의<br />// 일반 비트 연산을 사용할 때<br />#define COLLISION_CHECK		0x00000001 // or 1<br />#define NOT_PICKING	0x00000010 //...
비트 플래그 ON<br />// 비트 연산<br />bBitFlag |= COLLISION_CHECK;<br />// 쉬프트 연산<br />bBitFlag|= 1 << COLLISON_CHECK_SFT;<br />
비트 플래그 OFF<br />// 비트 연산<br />bBitFlag &= ~COLLISION_CHECK;<br />// 쉬프트 연산<br />bBitFlag&= ~(1<< COLLISON_CHECK_SFT);<br />
비트 플래그 사용<br />if(bBitFlag & COLLISION_CHECK)<br />{<br />플래그가 켜져있으면 할 행동<br />}<br />
비트 단위 <br />연산의 장점<br />
자료 효율성<br />Int형 1개로(4byte)로 32개의플래그를<br />중복하여설정할수있다. <br />(bool형의크기는 1byte. 4byte로는<br />4개의플래그만설정가능하다)<br />성능<br />비트...
비트 단위 <br />연산의 단점<br />
프로그래머의 실수에 따른 에러 가능성이 크다<br />컴퓨터의 WORD 크기에 의존적이다.<br />
커스텀<br />비트 배열<br />
<ul><li>BitArray		: 간단한 1차원 비트 배열
BitArray2D	: 2차원 비트 배열
TwoBitArray: 0~3까지의 정수값을원소로하는2비트 배열</li></li></ul><li><ul><li>명료한 구문 검사
이식성
범위 검사
Const의적절한 사용
고성능</li></li></ul><li>STL 비트셋<br />VS<br />비트 배열<br />
BitArray<br />
<ul><li>동적인배열크기조정
추가적인연산자제공 (ex. AllBitsFalse() )
표준적인비트연산자제공 (&, |, ^, &=, |=. ^=, ~)
Shift 연산자는지원하지않는다.</li></li></ul><li><ul><li>빠른속도를위해서, 생성시초기화하지않는다. (Clear() 메서드)
WORD 하나에들어갈정도의크기의배열은추가메모리를할당하지않는다.
내부는 Proxy 클래스를사용하여구현된다.</li></li></ul><li>비트 배열의<br />사용<br />
// 플래그 설정<br />BitArraybits(32);<br />bits[10] = true;<br />boolval = bits[10];<br />일반적인 배열 사용하듯이 사용하면 된다!<br />직관적이다!<br />
Upcoming SlideShare
Loading in …5
×

[Gpg1권 박민근] 1.10 간단하고 빠른 비트 배열

4,956 views

Published on

데브루키스터디(http://cafe.naver.com/devrookie) 발표 자료

Published in: Education
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,956
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
14
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

[Gpg1권 박민근] 1.10 간단하고 빠른 비트 배열

  1. 1. GPG 1.10간단하고 빠른 비트 배열<br />Devrookie, http://cafe.naver.com/devrookie<br />박민근<br />
  2. 2. 비트단위 연산을 빠르고 유용하게 사용할 수 있는 비트 배열 클래스의 소개 및 사용<br />
  3. 3. 비트단위 <br />연산이란?<br />
  4. 4. 0과 1로 이루어진 <br />1비트 값들의 배열을<br /> 일종의 플래그(true/false)<br />의 집합으로 사용하는 <br />자료 구조 테크닉<br />
  5. 5. 복수개의 플래그를 <br />설정할 때 주로 <br />유용하게 사용된다.<br />
  6. 6. 충돌 체크 유무<br />알파 블렌딩 체크 <br />컬링 제외<br />픽킹 제외<br />높이 체크 유무<br />기타 등등... 쓸때는 졸라 많다.<br />
  7. 7. 기본적인 비트<br />단위연산<br />
  8. 8. 비트 플래그의 정의<br />// 일반 비트 연산을 사용할 때<br />#define COLLISION_CHECK 0x00000001 // or 1<br />#define NOT_PICKING 0x00000010 // or 2<br />#define NOT_CULLING 0x00000100 // or 4<br />#define LOVE_AGEBREAK 0x00001000 // or 8<br />// 쉬프트 연산을 사용할 때<br />#define COLLISION_CHECK_SFT 0<br />#define NOT_PICKING_SFT 1<br />#define NOT_CULLING_SFT 2<br />#define LOVE_AGEBREAK_SFT 3<br />IntnBitFlag; // 비트 플래그를 저장할 변수<br />
  9. 9. 비트 플래그 ON<br />// 비트 연산<br />bBitFlag |= COLLISION_CHECK;<br />// 쉬프트 연산<br />bBitFlag|= 1 << COLLISON_CHECK_SFT;<br />
  10. 10. 비트 플래그 OFF<br />// 비트 연산<br />bBitFlag &= ~COLLISION_CHECK;<br />// 쉬프트 연산<br />bBitFlag&= ~(1<< COLLISON_CHECK_SFT);<br />
  11. 11. 비트 플래그 사용<br />if(bBitFlag & COLLISION_CHECK)<br />{<br />플래그가 켜져있으면 할 행동<br />}<br />
  12. 12. 비트 단위 <br />연산의 장점<br />
  13. 13. 자료 효율성<br />Int형 1개로(4byte)로 32개의플래그를<br />중복하여설정할수있다. <br />(bool형의크기는 1byte. 4byte로는<br />4개의플래그만설정가능하다)<br />성능<br />비트 단위의 연산은 수행 속도가 빠르다.<br />
  14. 14. 비트 단위 <br />연산의 단점<br />
  15. 15. 프로그래머의 실수에 따른 에러 가능성이 크다<br />컴퓨터의 WORD 크기에 의존적이다.<br />
  16. 16. 커스텀<br />비트 배열<br />
  17. 17. <ul><li>BitArray : 간단한 1차원 비트 배열
  18. 18. BitArray2D : 2차원 비트 배열
  19. 19. TwoBitArray: 0~3까지의 정수값을원소로하는2비트 배열</li></li></ul><li><ul><li>명료한 구문 검사
  20. 20. 이식성
  21. 21. 범위 검사
  22. 22. Const의적절한 사용
  23. 23. 고성능</li></li></ul><li>STL 비트셋<br />VS<br />비트 배열<br />
  24. 24.
  25. 25. BitArray<br />
  26. 26. <ul><li>동적인배열크기조정
  27. 27. 추가적인연산자제공 (ex. AllBitsFalse() )
  28. 28. 표준적인비트연산자제공 (&, |, ^, &=, |=. ^=, ~)
  29. 29. Shift 연산자는지원하지않는다.</li></li></ul><li><ul><li>빠른속도를위해서, 생성시초기화하지않는다. (Clear() 메서드)
  30. 30. WORD 하나에들어갈정도의크기의배열은추가메모리를할당하지않는다.
  31. 31. 내부는 Proxy 클래스를사용하여구현된다.</li></li></ul><li>비트 배열의<br />사용<br />
  32. 32. // 플래그 설정<br />BitArraybits(32);<br />bits[10] = true;<br />boolval = bits[10];<br />일반적인 배열 사용하듯이 사용하면 된다!<br />직관적이다!<br />
  33. 33. BitArray2D<br />
  34. 34. BitArray2D bits(10, 20);<br />Bits[3][4] = true;<br />
  35. 35. 다른 2차원배열과거의동등한방식으로작동한다.<br />1차원배열첨자연산자는ArrayProxy를반환한다.<br />따라서 BitArray2D의행은BitArray로취급할수없다.<br />
  36. 36. TwoBitArray<br />
  37. 37. 2비트값들의배열을제공한다. <br />조금만수정하면 3비트, 4비트등으로확장가능<br />더많은플래그값을지원하는아주편리한수단을제공한다.<br />
  38. 38. 응용<br />
  39. 39. <ul><li>캐릭터 및 오브젝트의 상태 플래그
  40. 40. 렌더링 플래그
  41. 41. 2차원, 3차원 타일맵에서맵 상태 정보 플래그
  42. 42. 스트림 저장/로드 기능 추가</li>

×