bitset
- 비트연산과 관련된 STL 이다.
비트마스크 (Bitmask)
비트마스크 정수의 이진수 표현(Bit)을 자료 구조로 쓰는 기법 현대의 모든 CPU는 이진수를 이용해도 모든 자fy 표현 내부적으로 이진수를 사용하는 컴퓨터들은 이진법 관련 연산들을 아주 빨리
zoosso.tistory.com
- 헤더파일: #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 |
댓글