int 나 char 등 기본 자료형 변수를 비트 단위로 사용함으로서 배열처럼 사용하는 기법.
ex) char a; //0000 0000
a |= 1<<3; // 3번째 비트(인덱스)에 1을 등록
a & 1<<3; // 3번째 비트(인덱스)의 값을 확인
a &= ~(1<<3); //3번째 비트(인덱스)의 값 제거
int 는 32비트라서 32개 크기의 bool 배열로 쓸 수 있음.
*참고 : 연산 순서 [ "+"(사칙), "<<" (시프트), "=="(비교), "&"(비트 연산) ]
10개 크기 배열 기준 (int 사용)
모든 원소 채우기
block = (1<<10) - 1
//100 0000 0000 -1
// 11 1111 1111
원소 추가
block |= 1<<idx;
원소 확인
block & 1<<idx;
원소 삭제
block &= ~(1<<idx);
원소 토글
block ^= 1<<idx;
- ^ : (xor) ( 같으면 0, 다르면 1)
원소 총 갯수 확인
int cnt =o;
int temp = block;
while(temp)
{
cnt += (temp & 1);
temp >>=1;
}
최소 원소만 출력?
int first = block & (-block);
//00 1100 1000 (block)
//11 0011 1000 (-block) (2의 보수)
//00 0000 1000
최소 원소 제거
block -= block & (-block);
// or
block &= (block-1)
'c++ 자료구조, 알고리즘' 카테고리의 다른 글
c++ LIS (최장 증가 부분 수열 찾기) (0) | 2023.09.24 |
---|---|
c++ 세그먼트 트리 (0) | 2023.09.23 |
c++ DP (0) | 2023.09.21 |
c++ 백 트래킹 (0) | 2023.09.21 |
c++ 누적합 (0) | 2023.09.20 |