1. bitset
- 0 or 1(false or true)의 값을 갖도록 필요한 경우 사용
- 비트 연산을 위한 여러 멤버 함수들을 지원
- vector과 유사한 형태
bitset: 정적 사이즈 or 복잡한 피트 연산 필요 시 사용
vector: 동적 사이즈 or 복잡한 비트 연산 필요 X 시 사용
- #include <bits/stdc++.h>
2. bitset 생성
bitset<10> bit;
bitset<10> bit("1111111111")
bitset<10> bit(64)
3. bitset 초기화
bitset<10> bit = 16;
bitset<10> bit = "0000010000";
4. bitset 접근 / 수정
- [ ]: 배열과 같은 특정 비트 접근
- reset(): 특정 비트 0 변환 / 인자가 없다면, 모든 비트 0으로 변환
bit[0] = 0;
bit.reset(1);
bit.reset();
5. 비트 변환
- to_ulong(): bit 배열을 10진수 ulong 자료형의 값으로 변환
- to_ullong(): bit 배열을 10진수 ullong 자료형의 값으로 변환
- to_string(): bit 배열을 string 자료형의 값으로 변환
bitset<10> bit = 64;
int n = bit.to_ulong();
string str = bit.to_string();
6. 비트 검사
- all: 모든 bit가 1이면 true, 아니면 false
- any: 한 bit라도 1이면 true, 아니면 false
- none: 모든 bit가 0이면 true, 아니면 false
bitset<10> bit = 0;
if (bit.all()) cout << "모두 1이다\n";
else cout << "모두 1이 아니다\n";
if (bit.any()) cout << "0이 아니다\n";
else cout << "0이다\n";
if (bit.none()) cout << "0이다\n";
else cout << "0이 아니다\n";
``
7. bitset 탐색
- count(): bitset 중 1의 개수
- size(): bitset의 길이
bitset<10> bit = 78;
cout << bit << "\n";
cout << "비트 중 1의 개수 : " << bit.count() << "\n";
for (int i = 0; i < bit2.size(); i++) {
cout << bit2[i] << " ";
}
cout << "\n";