알고리즘

비트마스크 사용의 이점과 사용방식

cvgsdvgs 2016. 1. 15. 00:05

비트마스크란 간단히 말하면 컴퓨터의 비트를 조작하는 것이다. 컴퓨터의 모든 데이터는 0과 1, 즉 비트로 이루어져 있다. 예를 들어 영어 a가 1101110 이라는 비트로 구성되어 있는 것이다. 컴퓨터의 이런 비트방식은 점과 선의 2가지로 영어를 표현하는 모스부호와도 비슷한 방식이다. 1101110이라는 형태는 7개의 전구가 늘어서 있고 1은 전구가 불이 들어오고 0은 전구가 꺼진 것과 동일하다고 보면 된다. 즉 1101110의 형태로 전구가 켜져있다면 알파벳 a로 하자고 사람들끼리 정하는 것이다. 이런 식으로 컴퓨터에서 비트형태로 존재하는 모든 데이터가 사람들이 합의한 실생활에서 사용되는 형태로 모니터 등의 출력장치에 나타나게 하는 것이다.

이런 비트마스크를 사용하는 이점으로는 속도가 빠르며 메모리 공간을 덜 사용하며 코드가 짧아 진다. 자동차 옵션을 일반적인 언어로 표현한다고 하면 선루프 있음, 라디오 있음, 열선 없음.....이런 식으로 표현될 것이다. 이렇게 모든 것을 언어로 표현하는 것은 상당히 번거롭다. 다음 표처럼  모든 옵션을 순서대로 나열하고 이 순서대로 O와 X로 옵션유무를 나타나게 한다고 한다면 휠씬 편리한 것을 알 수 있을 것이다.



비트마스크에서도 순서가 선루프, 라디오, 열선 순이라면 110이 선루프있음, 라디오있음, 열선 없음인 것을 바로 알 수 있을 것이다. 비트마스크를 사용한다는 것은 이와 같이 항목마다 2개의 선택지가 있는 경우 각 항목의 순서를 지정하고 비트마스크를 사용하면 매우 편리하다는 것을 알 수 있다. 이처럼 비스마크가 주로 사용되는 분야는 집합이다. 위의 자동차 옵션의 예에서는 선루프, 열선 등이 항목이었다면 숫자에서는 숫자가 항목의 역할을 하는 것이다. 101101을 왼쪽부터 숫자 0이라고 한다면 012345이고 해당 부분이 1이라는 것은 해당 숫자가 집합에 있다는 의미이다. 101101은 {0, 2, 3, 5} 집합을 나타내게 된다. 숫자집합의 비트마스크를 간단하게 조작하는 법 중 하나는 변수에 적절한 숫자를 넣으면 바로 집합에 포함된 값들을 바꾸는 것이 가능하다. 예를들어 비스마스크 변수 101101는 정수로 45를 나타낸다. 만약 비스마스크 변수를 30으로 초기화 한다면 011110으로 간단하게 집합의 수들을 바꾸는 것이 가능하다. 이 집합은 {1,2,3,4} 집합이 될 것이다. 또한 비트마스크는 집합의 각 원소 중 동시에 있을 수 없는 원소나 항상 동시에 있어야 하는 원소를 구현하는데 사용될 수 있다. 예를 들어 열선과 가죽시트 옵션은 동시에 하는 것이 불가능하다면 이를 비트마스크를 이용해 간단히 검증하는 것이 가능하다. 비트마스크는 열거형(enum)과 조합해서 사용하면 뛰어난 가시성과 성능을 동시에 얻을 수 있다.