제목 비트연산의 응용
등록자 미랑 등록일시 2009-11-23 조회수 181 HIT
출처 : PHPSCHOOL
원본링크 : http://phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=14353


비트연산 하면 속도만 생각하시는데 꼭 그렇지만은 않습니다.
비트연산은 은근한 매력이 있습니다.
또 응용할 수 있는 곳도 찾아보면 있습니다 ^^;

저의 경우 [ 중복선택 ] 이 필요한 항목에 대해서 주로 비트연산을 사용합니다.
다 아시는 내용이겠지만 그래도 유용하리라 생각하고 적겠습니다.

예)
[ 컴퓨터, 스포츠, 정치, 경제, 여행, 쇼핑, 게임 ]
이렇게 7가지의 항목 중에서 원하는 항목을 중복선택하게 하고
그 결과를 하나의 필드에 저장합니다.
그리고 컴퓨터또는 게임항목을 선택한 사람을 검색한다.

적용)
각 항목에 해당하는 value 값을 비트연산을 사용하기 위해 2의 제곱수로 지정합니다.
비트연산을 사용하기 위한 설계입니다.
컴퓨터는 1 = 2의 0제곱
스포츠는 2 = 2의 1제곱
정치는 4 = 2의 2제곱
...
게임은 64 = 2의 6제곱
물론 항목과 value 값들에 대한 정의 배열은 별도로 만들어놓고 참조하도록 해두어야 겠지요 ^^;
선택값을 넘기는 건 각자 해결이 가능하실 테고...

디비 입력 부분에서는 넘어온 value 값들을 그냥 더해서 하나의 필드에 넣어줍니다.
컴퓨터, 정치, 게임을 선택했다면 1 + 4 + 64 = 69 의 값이 저장됩니다.
물론 정수형 필드면 충분하구요, 정수형 필드일 경우 32가지 항목을 소화할 수 있습니다.
이렇게 하면 무엇을 선택했는지 전혀 알 수 없을 것 같지만 비트연산으로 얼마든지 검출이 가능합니다. (2의 제곱수로 설계를 했기때문에 ^^;)
결과값과 검출하고자 하는 값과의 비트 AND 값이 0이 아닌값(또는 검출하고자 하는 값)이 나오면 선택이 된 것입니다.

만약 컴퓨터또는 게임을 선택한 경우를 검색하고자 한다면 각 value 값의 합인 65 (1 + 64) 와 비트 AND 한 값이 0 이 아닌 경우를 검색하면 됩니다.
select * from 테이블 where 필드&65>0
이런식의 쿼리도 가능합니다.
여러 조합의 검색이 가능합니다.

설명이 허접하네요 ㅜㅜ;;
예전부터 써오던 방법이고 이렇게 쓰시는 분들도 많이 있을 것입니다만,
비트연산의 매력을 소개하고자 올려봅니다.
목록보기

        X  
38  위치고정 배너스크롤  2009-12-23 151
 비트연산의 응용  2009-11-23 181
36  비트연산으로 다중값 처리하기  2009-11-23 212
35  다른 페이지에서 임의의 스트립트 실행하기  2009-11-23 156
34  웹페이지 소스보기와 드래그가 안 될 경우  2008-02-27 162
33  마우스 오버시 텍스트 링크 부분의 설명을 창으로  2008-02-16 156
32  팝업 공지 쿠키 설정  2006-11-26 178
31  새 창 띄우기 옵션 (window.open)  2006-11-25 145
30  스크롤 게시물 (솔로몬닷컴 방식)  2006-05-28 107
29  동적으로 textarea 추가하기  2006-05-26 142
28  강추! 셀렉트 박스 스타일 수정  2006-05-03 134
27  금액에 점찍고 한글 표시하기...  2006-05-03 147
26  마우스 클릭시 창 하단의 링크 주소 감추기  2006-05-03 179
25  팝업창 띄우기 옵션 및 방법  2006-05-02 148
24  주소를 입력받아서 이동하는 스크립트  2006-05-02 128
1 2 3