Namespaces
Variants

std::bitset<N>:: bitset

From cppreference.net
Utilities library
bitset ( ) ;
(1) (C++11부터 noexcept)
(C++11부터 constexpr)
(2)
bitset ( unsigned long val ) ;
(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)

여러 선택적 데이터 소스 중 하나에서 새로운 비트셋을 생성합니다:

1) 기본 생성자. 모든 비트가 0으로 설정된 bitset을 생성합니다.
2) 부호 없는 정수 val 로부터 비트셋을 생성합니다.
값 표현의 비트 수가 value representation of unsigned long (until C++11) unsigned long long (since 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 대신 std::basic_string_view 를 사용합니다.
5) (3) 와 유사하지만, const CharT * 를 사용하며 std::basic_string 을 사용하지 않습니다.

다음 코드와 동등합니다: bitset ( n == std:: basic_string < CharT > :: npos
? std:: basic_string < CharT > ( str )
: std:: basic_string < CharT > ( str, n ) , 0 , n, zero, one )
.

(C++26 이전)

다음 코드와 동등합니다: bitset ( n == std:: basic_string_view < CharT > :: npos
? std:: basic_string_view < CharT > ( str )
: std:: basic_string_view < CharT > ( str, n ) , 0 , n, zero, one )
.

(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 가 아닌 경우.
5) 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)