프로그램을 개발하다보면 enum이라는 녀석을 사용하게된다.
주로 무언가를 구분하거나 옵션을 제공할때 쓰이는데 여기서는 옵션을 제공할때를 살펴보자.
MOVABLE(움직일 수 있는), ATTACKABLE(공격할 수 있는) 이라는 두가지 옵션을 한꺼번에 제공해야한다면 어떻게할까?
enum STATE { MOVABLE, ATTACKABLE, MOVABLE_AND_ATTACKABLE, END }
이렇게 사용할 수는 있다. 그러나 매번 이렇게 따로 항목을 추가하는건 번거롭다.
이럴때 사용할 수 있는게 비트연산이다.
#define DT_TOP 0x00000000
#define DT_LEFT 0x00000000
#define DT_CENTER 0x00000001
#define DT_RIGHT 0x00000002
#define DT_VCENTER 0x00000004
#define DT_BOTTOM 0x00000008
#define DT_WORDBREAK 0x00000010
#define DT_SINGLELINE 0x00000020
#define DT_EXPANDTABS 0x00000040
#define DT_TABSTOP 0x00000080
#define DT_NOCLIP 0x00000100
#define DT_EXTERNALLEADING 0x00000200
#define DT_CALCRECT 0x00000400
#define DT_NOPREFIX 0x00000800
#define DT_INTERNAL 0x00001000
수평 정렬을 하는 옵션, 수직 정렬을 하는 옵션, 개행 여부, 여러줄 출력 등의 옵션들이 있다고하자.
이 많은 옵션들이 OR 연산자로 연결되어 딱 하나의 인수로 전달된다.
예를 들어 DT_CENTER | DT_BOTTOM | DT_WORDBREAK 등과 같이 하면 세가지 옵션을 하나의 인수로
전달한 것이다.
한 인수에 이렇게 여러가지 옵션을 같이 전달할 수 있는 이유는 각 옵션이 비트별로 배정되어 있어
상호 간섭을 하지 않기 때문이다. ( OR 연산을해보면 더 옵션들은 서로의 자리수를 침범하지 않는다는 걸 알 수 있다.)
옵션들의 실제값을 보면 옵션값들이 1, 2, 4, 8, 10 등과 같이 2의 거듭승으로 정의되어 있어
옵션별로 비트 자리가 정해져있다.
'C++' 카테고리의 다른 글
STL - vector (0) | 2020.10.27 |
---|---|
STL (0) | 2020.10.27 |
탬플릿 (0) | 2020.10.27 |
인라인함수, 매크로함수 (0) | 2020.10.27 |
타입 캐스팅 (0) | 2020.10.27 |