IT 취미생활.  
Front Page
Tag | Location | Media | Guestbook | Admin   
 
'Bit Flag'에 해당하는 글(1)
2008.03.09   Bit 연산을 이용한 Flag 사용하기


Bit 연산을 이용한 Flag 사용하기
윈도우에 보면 항상 윈도우 스타일을 설정 할때 | 를 이용하여 여러개의
bit값을 or를 하게 된다.

예를 들어 아래와 처럼 말이다.
WS_POPUP | WS_CHILD | WS_ ... 이런식으로 BIT OR 연산으로 플래그를 사용한다.
어떤 기능을 수행하는 함수를 만들때 여러가지 옵션에 따라서 수행 방법을 달리 하거나 할때 유용하다.
PlatForm API를 만들때 종종 사용이 된다. 위에서도 언급 했듯이 윈도우 스타일 ~ Popup 스타일등


그런 옵션을 만드는 방법은?

1. bool형 인자를 각각의 옵션 갯수대로 만든다.
   이것은 몇개 없을경우(1,2개 정도)에는 괜찮지만 많아 지면 각각의 옵션마다
   전부다 if를 해야하는 관계로 무척 복잡하다.
   초급용.


2. int형 하나를 만들어서 그 값을 if해서 1,2,3,4로 검출한다.
   이것은 하나의 변수로 여러 옵션을 만들 경우 유용하다.
   그러나 #define을 잘 쓰지 않으면 몇번이 어떤 옵션인지 헷갈린다.
   중급용.


3. dw형(DWORD) 윈도우 스타일 플래그를 만든다.
   반드시 #define과 함께 쓰고 비트 연산을 한다.
   무척 유용하다. 윈도우에서 자주 쓰는 스타일이다.
   고급용이다.


1,2 번은 대충 짐작을 할것이고 3번에 대해서 알아보자.
2번의 경우 각각을 if 하는데 어떤 기능인지 헷갈린다고 했다.
3번 같은 플래그는 일단. 기능별로 분리를 하고 #define을 해야한다.

#define FLAG_AAA 0x001
#define FLAG_BBB 0x002
#define FLAG_CCC 0x004
#define FLAG_DDD 0x008
#define FLAG_EEE 0x010

이런식으로 정의 한다.


우리가 함수에서 플래그를 넣을때
dwFlags = FLAG_AAA | FLAG_BBB | FLAG_CCC;
이렇게 넣었다고 가정해보자.

| 는 비트 OR이므로
FLAG_AAA = 00001
FLAG_BBB = 00010
FLAG_CCC = 00100

이렇게 된다. (이진수로)
다 합치면(OR)하면 00111이다.



그러면 그 인자를 받아서 detect해보는 작업을 하겠다.

if( FLAG_BBB & dwFlags )
이렇게 하면 이 값이 true가 된다.

왜냐?
비트 연산을 한번더 해보면
dwFlags는 이진수로 00111이고.
FLAG_BBB는 이진수로 00010이다.(0x002)
& (AND) 연산을 해보자.
AND는 둘다 1일때만 결과가 1이다.
00111
00010
-----
00010 이 결과이다.
이것은 0보다  큰 값이므로 true가 된다.

우리가 처음에 FLAG_AAA | FLAG_BBB | FLAG_CCC를 했으므로
if( FLAG_DDD & dwFlags )를 해보면..
00111
01000
----- &하면
00000

if의 결과는 false이다.

-0- 기억이 가물 가물한데 내가 썼던 글인가????


BLOG main image
취미생활
 Notice
 Category
분류 전체보기 (191)
매일매일갱생 (83)
서버개발 (1)
임베디드개발 (12)
Programming (80)
Personal Projects (6)
유용한 프로그램 (0)
 TAGS
영어 이메일 미라지폰 English MP3 Wince5.0 Algorithm Brazil M480 spam mail Windows Mobile6.0 Error Case C++ DirectShow Debug 티스토리 초대장 출장 서태지 Linux 티스토리초대 VC++ 퇴사 project C 군대 ISDB-T It isdbt warning 1seg debugging 개발자 음식 DVB DVB-T english email 벨소리 변경 알고리즘 Java Dshow
 Calendar
«   2024/04   »
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
 Recent Entries
 Recent Comments
 Recent Trackbacks
 Archive
 Link Site
zextor
괴짜 프로그래머의 일상사~@@
Gag & Peace, and more..
Kazakhstan Almaty.......
Min-A
Sadgarret
Steve Yoon's log
가슴 뛰는 삶을 살아라
오스틴 파워
GUI sin
melanie parker_Lady
제레미의 TV 2.0 이야기..
 Visitor Statistics
Total :
Today :
Yesterday :
rss