utility_bitset (비트셋 유틸리티)
이 페이지에서는 C++ 표준 라이브러리의 std::bitset 클래스 템플릿에 대해 설명해요. std::bitset은 고정된 크기의 비트 시퀀스를 표현하며, 표준 논리 연산자로 조작하거나 문자열·정수로 변환할 수 있어요. 컴파일 타임에 크기가 결정되는 비트 집합이 필요할 때 사용해요.
출처: cppreference
본문
<bitset> 헤더에 정의되어 있어요.
| 정의 |
|
|
template < std :: size_t N > class bitset ; |
|
|
클래스 템플릿 bitset은 N비트로 이루어진 고정 크기 시퀀스를 나타내요. 비트셋은 표준 논리 연산자로 조작할 수 있고, 문자열 및 정수로 변환하거나 그 반대로 변환할 수 있어요. 문자열 표현과 시프트 연산의 방향을 정할 때, 시퀀스는 정수의 이진 표현처럼 가장 낮은 인덱스 요소가 오른쪽에 있는 것으로 간주해요.
bitset은 CopyConstructible 및 CopyAssignable 요구 사항을 충족해요.
std::bitset의 모든 멤버 함수는 constexpr이에요. 상수 표현식 평가에서 std::bitset 객체를 생성하고 사용할 수 있어요. |
(C++23부터) |
템플릿 매개변수
멤버 타입
reference |
비트에 대한 참조를 나타내는 프록시 클래스 (클래스) |
멤버 함수
| (생성자) |
bitset을 생성해요 (공개 멤버 함수) [edit] |
operator== operator!= (C++20에서 제거됨) |
내용을 비교해요 (공개 멤버 함수) [edit] |
| 요소 접근 |
|
operator[] |
특정 비트에 접근해요 (공개 멤버 함수) [edit] |
test |
특정 비트에 접근해요 (공개 멤버 함수) [edit] |
all any none |
모든 비트, 일부 비트, 또는 어떤 비트도 true인지 확인해요 (공개 멤버 함수) [edit] |
count |
true로 설정된 비트 수를 반환해요 (공개 멤버 함수) [edit] |
| 용량 |
|
size |
bitset이 보유한 비트 수를 반환해요 (공개 멤버 함수) [edit] |
| 수정자 |
|
operator&= operator|= operator^= operator~ |
이진 AND, OR, XOR, NOT 연산을 수행해요 (공개 멤버 함수) [edit] |
operator<<= operator>>= operator<< operator>> |
이진 왼쪽 및 오른쪽 시프트 연산을 수행해요 (공개 멤버 함수) [edit] |
set |
비트를 true 또는 주어진 값으로 설정해요 (공개 멤버 함수) [edit] |
reset |
비트를 false로 설정해요 (공개 멤버 함수) [edit] |
flip |
비트 값을 반전해요 (공개 멤버 함수) [edit] |
| 변환 |
|
to_string |
데이터의 문자열 표현을 반환해요 (공개 멤버 함수) [edit] |
to_ulong |
데이터의 unsigned long 정수 표현을 반환해요 (공개 멤버 함수) [edit] |
to_ullong (C++11) |
데이터의 unsigned long long 정수 표현을 반환해요 (공개 멤버 함수) [edit] |
비멤버 함수
operator& operator| operator^ |
bitset에 대해 이진 논리 연산을 수행해요 (함수 템플릿) [edit] |
operator<< operator>> |
bitset의 스트림 입력 및 출력을 수행해요 (함수 템플릿) [edit] |
도우미 클래스
std::hash <std::bitset> (C++11) |
std::bitset에 대한 해시 지원 (클래스 템플릿 특수화) [edit] |
참고 사항
비트셋의 크기를 컴파일 타임에 알 수 없거나, 런타임에 크기를 변경해야 한다면 std::vector<bool>이나 boost::dynamic_bitset<> 같은 동적 타입을 대신 사용할 수 있어요.
| 기능 테스트 매크로 |
값 |
표준 |
기능 |
__cpp_lib_constexpr_bitset |
202207L |
(C++23) |
더욱 constexpr한 std::bitset |
__cpp_lib_bitset |
202306L |
(C++26) |
std::bitset과 std::string_view 인터페이스 |
예제
#include <bitset>
#include <cassert>
#include <cstddef>
#include <iostream>
int main()
{
typedef std::size_t length_t, position_t; // the hints
// constructors:
constexpr std::bitset<4> b1;
constexpr std::bitset<4> b2{0xA}; // == 0B1010
std::bitset<4> b3{"0011"}; // can also be constexpr since C++23
std::bitset<8> b4{"ABBA", length_t(4), /*0:*/'A', /*1:*/'B'}; // == 0B0000'0110
// bitsets can be printed out to a stream:
std::cout << "b1:" << b1 << "; b2:" << b2 << "; b3:" << b3 << "; b4:" << b4 << '\n';
// bitset supports bitwise operations:
b3 |= 0b0100; assert(b3 == 0b0111);
b3 &= 0b0011; assert(b3 == 0b0011);
b3 ^= std::bitset<4>{0b1100}; assert(b3 == 0b1111);
// operations on the whole set:
b3.reset(); assert(b3 == 0);
b3.set(); assert(b3 == 0b1111);
assert(b3.all() && b3.any() && !b3.none());
b3.flip(); assert(b3 == 0);
// operations on individual bits:
b3.set(position_t(1), true); assert(b3 == 0b0010);
b3.set(position_t(1), false); assert(b3 == 0);
b3.flip(position_t(2)); assert(b3 == 0b0100);
b3.reset(position_t(2)); assert(b3 == 0);
// subscript operator[] is supported:
b3[2] = true; assert(true == b3[2]);
// other operations:
assert(b3.count() == 1);
assert(b3.size() == 4);
assert(b3.to_ullong() == 0b0100ULL);
assert(b3.to_string() == "0100");
}
출력:
b1:0000; b2:1010; b3:0011; b4:00000110
같이 보기
vector <bool> |
공간 효율적인 동적 비트셋 (클래스 템플릿 특수화) [edit] |
| 비트 조작 (C++20) |
개별 비트와 비트 시퀀스에 접근·조작·처리하는 유틸리티 |
더 알아보기 (Learn more)
cppreference