비트연산은 공부할 때만 익혔지 실제 프로그래밍에 사용해 본적은 이번이 처음이다. '간단히 비트 연산으로 하면되지' 라고 생각했지만 코딩한 경우는 처음이라 어색했다. 몇 가지 비트연산을 정리해 보자.
Case 1. OR 연산
비트연산은 각 자리을 true / false 로 표현한다. 이진수 001
과 010
은 각 각 별도의 값을 의미하고 011
은 앞의 두 값을 합한 값을 의미한다. 예를 들어 001
이 '사과'이고 010
이 '당근'이라면 011
은 '사과, 당근'을 의미한다. 이것은 OR 연산으로 쉽게 계산할 수 있다.
001
| 010
= 011
실제 코딩에서 사용한다면 십진수에 비트 연산을 사용하면 된다.
1
| 2
= 3
OR 연산으로 나온 결과를 'A'라고 부르자.
Case 2. AND 연산
위에서 정한 'A'를 저장한 뒤 검색할 수 있다. 예를 들어 우리가 저장한 'A' (011
)에 '사과'(010
)가 있는지 검색하는 경우다. 이때는 'A'와 사과를 AND 연산으로하고 그 결과가 0보다 큰지 판단하여 검색할 수 있다.
011
& 010
= 010
만약 'A'에 없는 데이터인 '가지'(100
)를 검색하는 경우는 어떨까?
011
& 100
= 000
결과가 0이다. A에 가지는 없는 것이다.
Case 3. 다중값을 검색할 경우
'A'에서 다중값이 있는지도 검색할 수 있다. 예를 들어 'A'(011
)에 '사과'(010
)와 '당근'(001
) 둘다 포함되어 있는지 알고 싶은 경우다. 이때는 검색할 대상들을 OR연산하고 그 결과'B'를 'A'와 AND 연산하여 그 결과가 'B'와 같으면 검색 성공이다.
(010
| 001
) & 011
= 011
011
= 011
반대로 '사과'(010
)와 '가지'(100
)는 찾을 수 없다는 결과가 나온다.
(010
| 100
) & 011
= 010
010
!= 011