정수가 비트가 나열된 형태라는 점을 이용해서 정수를 불린 값들로 이루어진 작은 집합으로 표현할 수 있다. 이렇게 해당 정수에 대한 비트연산으로 모든 집합에 대한 연산이 가능하다.

표현방법

부호가 있는 32비트 정수를 이용하면 되채 32개의 원소까지 처리할 수 있다. S = 34는 이진법으로 100010 이므로 작은 집합 $\{1, 5\}$를 표현한 것이기도 하다.

비트연산

정수에 2를 곱하거나 2로 나누기 위해서 는 해당 정수를 왼쪽과 오른쪽으로 한 비트 시프트하기만 하면 된다. 나누기의 경우 최하위 비트는 버리므로 정수를 2로 나누고 자동으로 내림하게 된다는 것을 유의하자.

집합의 원소 켜기 (놓기)

집합의 j번째 원소를 놓으려면(키려면) 비트 OR연산을 이용하면 된다.

S |= ( 1 << j )

집합의 원소 확인

집합의 j번째 원소가 켜져 있는 지 확인하려면 비트 AND연산을 이용하자.

T = S & ( 1 << j )

T = 0 이라면 j번쨰 원소가 꺼져있는 것이고 T ≠ 0 ( T = ( 1 << j ))라면 j번째 원소가 켜져 있는 것이다.

집합의 원소 끄기 (지우기)

집합의 j번째 원소를 지우려면(끄려면) 비트 AND연산을 이용하자.

S &= ~( 1 << j )

집합의 원소 반전

집합의 j번째 원소를 반전하려면 비트 XOR연산을 사용하자.

S ^= ( 1 << j )