• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
[Gpg1권 박민근] 1.10 간단하고 빠른 비트 배열
 

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

on

  • 2,758 views

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

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

Statistics

Views

Total Views
2,758
Views on SlideShare
2,756
Embed Views
2

Actions

Likes
1
Downloads
6
Comments
0

2 Embeds 2

http://www.heej.net 1
http://nigayo.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

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