비트 연산

비트연산은 공부할 때만 익혔지 실제 프로그래밍에 사용해 본적은 이번이 처음이다. '간단히 비트 연산으로 하면되지' 라고 생각했지만 코딩한 경우는 처음이라 어색했다. 몇 가지 비트연산을 정리해 보자.

Case 1. OR 연산

비트연산은 각 자리을 true / false 로 표현한다. 이진수 001010은 각 각 별도의 값을 의미하고  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