본문 바로가기

Algorithm/A. Intro & STL

14. Bitset

bitset(비트셋)은 고정된 길이의 bool 타입 변수를 관리할 수 있는 컨테이너이다. 일반적인 변수가 바이트 단위로 처리되는 데 비해 비트셋은 비트 단위로 처리되기 때문에 속도가 더 빠르다. bitset 클래스는 <bitset> 헤더파일에 정의되어 있으며 이 헤더파일을 인클루드하면 bitset을 사용할 수 있다.

 

bitset의 각각의 비트는 true(1) 또는 false(0)로 설정될 수 있다.

 

bitset을 선언하는 방법은 다음과 같다.

bitset<10> b;

<> 안에는 변수가 들어갈 수 없고 상수를 써야 한다. 또한 <> 안에 들어가는 상수의 타입이 부호 없는 정수형인 size_t이기 때문에 실수로 <> 안에 음수를 써도 컴파일 에러가 나지 않는다. 음수를 썼다면 size_t형에서는 매우 큰 양수로 인식되어 그만한 길이의 메모리를 찾지 못해 프로그램에 문제가 생길 수도 있으므로 주의해야 한다.

 

다음은 bitset의 멤버 함수이다:

b.size(); b의 길이를 반환한다.
b.count(); b에서 true로 설정된 비트의 수를 반환한다.
b.all(); b의 모든 비트가 true인지 확인한다.
b.any(); b에 true로 설정된 비트가 있는지 확인한다.
b.none(); b의 모든 비트가 false인지 확인한다.
b.test(i); b의 i번째 비트의 상태를 반환한다.
b.set(); b의 모든 비트를 true로 설정한다.
b.reset(); b의 모든 비트를 false로 설정한다.
b.flip(); b의 모든 비트를 반전한다.
b.to_string(); b를 basic_string형으로 변환한 문자열을 반환한다.
b.to_string(x); b를 basic_string형으로 변환한 문자열을 반환한다. 0은 문자 x로 변환한다.
b.to_string(x,y); b를 basic_string형으로 변환한 문자열을 반환한다. 0은 문자 x로, 1은 문자 y로 변환한다.
b.to_ulong(); b를 unsigned long형 정수로 변환한 값을 반환한다.
b.to_ullong(); b를 unsigned long long형 정수로 변환한 값을 반환한다.

bitset::all 함수와 bitset::ullong 함수는 C++11 표준이다.

bitset에는 [], ==, !=, ~, <<, >>, <<=, >>=, &=, ^=, |= 연산자가 오버로딩되어 있다. 단 != 연산자는 C++20에서 삭제되었다. 그밖에 &, ^, | 연산자가 외부 함수로 존재한다. [] 연산자와 bitset::test 함수의 차이점은 범위 체크의 유무이다.

 

→ solved.ac tag: bitset

'Algorithm > A. Intro & STL' 카테고리의 다른 글

16. Span  (0) 2021.01.25
15. Valarray  (0) 2021.01.24
13. String  (0) 2021.01.17
12. Unordered Container  (0) 2021.01.15
11. Map & Multimap  (0) 2021.01.13