std::bitset<N>::bitset
cppreference.net에서 가져옴
bitset();
|
(1) | (C++11부터 noexcept) (C++11부터 constexpr) |
bitset( unsigned long val );
|
(2) | (C++11까지) |
constexpr bitset( unsigned long long val ) noexcept;
|
(C++11부터) | |
template< class CharT, class Traits, class Alloc >
explicit bitset
( const std::basic_string<CharT, Traits, Alloc>& str,
typename std::basic_string
<CharT, Traits, Alloc>::size_type pos = 0,
typename std::basic_string<CharT, Traits, Alloc>::size_type
n = std::basic_string<CharT, Traits, Alloc>::npos,
CharT zero = CharT('0'), CharT one = CharT('1') );
|
(3) | (C++23부터 constexpr) |
template< class CharT, class Traits >
constexpr explicit bitset
( std::basic_string_view<CharT, Traits> str,
std::size_t pos = 0, std::size_t n = std::size_t(-1),
CharT zero = CharT('0'), CharT one = CharT('1') );
|
(4) | (C++26부터) |
template< class CharT >
explicit bitset( const CharT* str, std::size_t n = std::size_t(-1),
CharT zero = CharT('0'), CharT one = CharT('1') );
|
(5) | (C++11부터) (C++23부터 constexpr) |
여러 선택적 데이터 소스 중 하나에서 새 bitset을 생성합니다:
1) 기본 생성자. 모든 비트가 0으로 설정된 bitset을 생성합니다.
2) 부호 없는 정수
val에서 bitset을 생성합니다. 값 표현의 비트 수가
unsigned long(C++11까지)unsigned long long(C++11부터)라고 할 때 S:
- 첫 번째 (가장 오른쪽, 최하위)
std::min(S, N)비트 위치는val의 해당 비트 값으로 초기화됩니다. - 만약
S이N보다 작으면, 나머지 비트 위치는 0으로 초기화됩니다.
3)
str의 문자를 사용하여 bitset을 생성합니다. 선택적 시작 위치 pos와 길이 n, 그리고 설정된 비트(one)와 설정되지 않은 비트(zero)에 대한 대체 값을 나타내는 문자를 제공할 수 있습니다. Traits::eq()는 문자 값을 비교하는 데 사용됩니다. 초기화 문자열의 유효 길이는
std::min(n, str.size() - pos)입니다.4) (3)과 유사하지만, std::basic_string_view를 std::basic_string 대신 사용합니다.
5) (3)과 유사하지만,
const CharT*std::basic_string 대신 를 사용합니다.
|
|
(C++26까지) |
|
|
(C++26부터) |
매개변수
| val | - | 비트셋을 초기화하는 데 사용되는 숫자 |
| str | - | 비트셋을 초기화하는 데 사용되는 문자열 |
| pos | - | str 내의 시작 오프셋 |
| n | - | str 에서 사용할 문자 수 |
| zero | - | str 에서 설정되지 않은 비트를 위한 대체 문자 |
| one | - | str 에서 설정된 비트를 위한 대체 문자 |
예외
3,4)
std::out_of_range
만약
pos
>
str.
size
(
)
인 경우,
std::invalid_argument
만약 어떤 문자가
one
또는
zero
가 아닌 경우.
참고 사항
| 기능 테스트 매크로 | 값 | 표준 | 기능 |
|---|---|---|---|
__cpp_lib_constexpr_bitset
|
202207L
|
(C++23) |
더 많은 constexpr
std::bitset
, 오버로드
(
3,5
)
|
__cpp_lib_bitset
|
202306L
|
(C++26) |
std::bitset
과
std::string_view
연동
(
4
)
|
예제
이 코드 실행
#include <bitset> #include <climits> #include <iostream> #include <string> int main() { // 빈 생성자 (1) std::bitset<8> b1; // [0,0,0,0,0,0,0,0] // unsigned long long 생성자 (2) std::bitset<8> b2(42); // [0,0,1,0,1,0,1,0] std::bitset<70> bl(ULLONG_MAX); // [0,0,0,0,0,0,1,1,1,...,1,1,1] in C++11 std::bitset<8> bs(0xfff0); // [1,1,1,1,0,0,0,0] // 문자열 생성자 (3) std::string bit_string = "110010"; std::bitset<8> b3(bit_string); // [0,0,1,1,0,0,1,0] std::bitset<8> b4(bit_string, 2); // [0,0,0,0,0,0,1,0] std::bitset<8> b5(bit_string, 2, 3); // [0,0,0,0,0,0,0,1] // 사용자 정의 0/1 숫자를 사용한 문자열 생성자 (3) std::string alpha_bit_string = "aBaaBBaB"; std::bitset<8> b6(alpha_bit_string, 0, alpha_bit_string.size(), 'a', 'B'); // [0,1,0,0,1,1,0,1] // 사용자 정의 숫자를 사용한 char* 생성자 (5) std::bitset<8> b7("XXXXYYYY", 8, 'X', 'Y'); // [0,0,0,0,1,1,1,1] std::cout << "b1: " << b1 << "\nb2: " << b2 << "\nbl: " << bl << "\nbs: " << bs << "\nb3: " << b3 << "\nb4: " << b4 << "\nb5: " << b5 << "\nb6: " << b6 << "\nb7: " << b7 << '\n'; }
가능한 출력:
b1: 00000000 b2: 00101010 bl: 0000001111111111111111111111111111111111111111111111111111111111111111 bs: 11110000 b3: 00110010 b4: 00000010 b5: 00000001 b6: 01001101 b7: 00001111
결함 보고서
다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 396 | C++98 |
오버로드
(3)
의 0과 1 문자 값이
0 와 1 이었음 (이는 '0' 과 '1' 에 해당하지 않음) |
이러한 문자들의 값을
제공하는 매개변수 추가 |
| LWG 457 | C++98 |
오버로드
(2)
에서
S
가
CHAR_BIT
*
sizeof
(
unsigned
long
)
이었지만, unsigned long 이 모든 비트를 값 표현에 사용한다는 보장이 없음 |
값 표현의 비트 수를
고려하도록 변경 |
| LWG 2250 | C++98 |
pos
>
str.
size
(
)
가
true
인 경우
동작이 정의되지 않음 |
이 경우 항상 예외를
발생시키도록 변경 |
참고 항목
|
비트를
true
또는 지정된 값으로 설정
(public member function) |
|
|
비트를
false
로 설정
(public member function) |