비트 마스킹
- 정수 하나의 비트에 on off 하여 체크한다. (bool[32] 배열 사용하는 거와 비슷)
장점
구현하기
출력
void show(int *a) {
for (int i = 32; i > 0; i--) {
cout << ((*a & (1 << (i - 1))) ? 1 : 0 );
}
}
초기화(null)
void init(int *a) {
*a = 0;
}
모두 포함
void full(int *a) {
*a = -1;
}
i 번째 인덱스 삽입
void set(int *a, int i) {
*a |= (1 << i);
}
i 번째 인덱스 삭제
void drop(int *a, int i) {
*a &= ~(1 << i);
}
i 번째 인덱스 확인
bool check(int *a, int i) {
return (*a & (1 << i));
}
i 번째 인덱스 toggle (1 은 0으로 0은 1으로) (xor 연산 ^)
void toggle(int *a, int i) {
*a ^= (1 << i);
}
마지막 원소 구하기
int getLast(int *a) {
return (*a & -*a);
}
마지막 원소 삭제하기
void dropLast(int *a) {
*a &= (*a - 1);
}
TEST
int main () {
int a;
full(&a);
cout << "모두 포함\n";
show(&a); cout << "\n";
init(&a);
cout << "null초기화\n";
show(&a); cout << "\n";
set(&a, 4);
set(&a, 7);
cout << "4, 7 추가\n";
show(&a); cout << "\n";
drop(&a, 4);
cout << "4 삭제\n";
show(&a); cout << "\n";
cout << "7 확인 :" << check(&a,7) << "\n";
toggle(&a, 7);
toggle(&a, 3);
toggle(&a, 2);
cout << "2, 3, 7 togle\n";
show(&a); cout << "\n";
cout << "마지막 원소 구하기 : " << getLast(&a) << "\n";
show(&a); cout << "\n";
dropLast(&a);
cout << "마지막 원소 삭제\n";
show(&a); cout << "\n";
}
