bitset
- 비트연산과 관련된 STL 이다.
- 헤더파일: #include <bitset>
- bitset은 [index]로 접근해서 연산자로 쓰기/읽기 가능하다.
- 주의할 점은 기존 배열이나 문자열과 다른게 시작 인덱스 "0"이
앞쪽이 아닌 뒤쪽(역순)이라는 점이다.
관련 함수
- reset(index): index 비트를 "0" 으로 변경 → bit[index] = 0;
생략시 전체 비트 "0"으로 변경
- set(index, val): index 비트를 val 값으로 변경 → bit[index] = val;
여기서 val = "0" or "1"이며, 생략 시 전체 비트 "1"로 변경
- flip(index): index 비트 반전 (0 ↔ 1)
생략시 전체 비트 반전 → !bit[index]
- all() : 모든 비트가 1일 경우 true / 그렇지 않으면 false
- any() : 비트가 1인 것이 하나라도 존재한다면 true / 그렇지 않으면 false
- none() : 비트가 1인 것이 하나라도 존재하지 않는다면 true / 그렇지 않으면 false
모든 비트가 0인지 확인하는 용도
- size() : bitset size 반환
- count() : 현재 bitset에 있는 비트 "1" 개수 반환
- to_string() : bitset을 문자열로 변환
- to_ulong() : bitset을 unsigned long integer 타입으로 변환
- to_ullong() : bitset을 unsigned long long 타입으로 변환
bitset 생성
- bitset<5> bit; // 000000
- bitset<5> bit("10101"); // 문자열 "10101"로 초기화
- bitset<20> bit(29); // 10진수 29로 초기화
#include <iostream>
#include <bitset>
using namespace std;
int main() {
bitset<5> bit("10101");
cout << bit << "\n";
int n = bit.to_ulong();
cout << "10진수 표현: " << n << "\n";
if (bit.any())
{
cout << "Not Zero" << endl;
}
else
{
cout << "Zero" << endl;
}
}
bitset 활용
#include <iostream>
#include <bitset>
#include <string>
using namespace std;
int main() {
bitset<20> bit(11); // 0000'0000'0000'0000'1011
string str = bit.to_string();
cout << str << "\n";
if (bit.any())
{
// "1"이 처음 나오는 곳을 find
// 찾은 지점부터 문자열 끝 부분을 추출
str = str.substr(str.find('1'));
}
else
{
str = "0";
}
cout << "2진수 변환: " << str << "\n";
// ------------------------------------------------------
cout << "bitset 중 1의 개수 : " << bit.count() << endl;
for (int i = 0; i < bit.size(); i++)
{
// bitset은 뒤에서부터 인덱스 접근
cout << bit[i] << " ";
}
cout << endl;
}
Reference
'프로그래밍 언어 > C++' 카테고리의 다른 글
[C++] [STL] fill 함수 사용해보기 (0) | 2021.09.11 |
---|---|
[C++] 로그(log) 함수 (0) | 2021.09.01 |
[C++] [STL] Priority_queue (feat. 여러 기준으로 우선순위 큐 구현해보기) (0) | 2021.08.01 |
[C++] [STL] List (0) | 2021.07.30 |
[C++] [STL] Deque (0) | 2021.07.30 |
댓글