C++ 비트셋 흥미로운 사실

비트셋 비트 수준에서 데이터를 처리하기 위한 C++ 표준 템플릿 라이브러리의 컨테이너입니다. 

1. bitset은 비트(0 또는 1의 두 가지 값만 가능한 요소)를 저장합니다. 그러나 비트세트 생성자에 위치를 제공하여 문자열의 일부를 얻을 수 있습니다(위치는 문자열 위치를 기준으로 왼쪽에서 오른쪽으로 지정됩니다).

예:

C++
   // C++ program to demonstrate that we can get part of a    // bit string in bitset.   #include          #include         #include          int     main  ()   {      std  ::  string     bit_string     =     '110010'  ;      std  ::  bitset   <  8  >     b1  (  bit_string  );     // [0 0 1 1 0 0 1 0]      // string from position 2 till end      std  ::  bitset   <  8  >     b2  (  bit_string       2  );     // [0 0 0 0 0 0 1 0]      // string from position 2 till next 3 positions      std  ::  bitset   <  8  >     b3  (  bit_string       2       3  );     // [0 0 0 0 0 0 0 1]          std  ::  cout      < <     b1      < <     'n'      < <     b2      < <     'n'      < <     b3      < <     'n'  ;      return     0  ;   }      

산출:

00110010 00000010 00000001 

2. std::basic_string _str의 문자를 사용하여 비트세트를 구성할 수 있습니다. 선택적 시작 위치 _pos 및 길이 _n은 물론 설정(_one) 및 설정 해제(_zero) 비트에 대한 대체 값을 나타내는 문자도 제공될 수 있습니다. 

통사론:

std::bitset b1(str pos n zero one);   str   : string used to initialize the bitset   pos   : a starting offset into str   n   : number of characters to use from str   zero   : alternate character for unset bits in str   one   : alternate characters for set bits in str  
  • _pos > str.size()인 경우 이 생성자는 std::out_of_range를 발생시킵니다.
  • _str에서 검사된 문자가 0이나 1이 아닌 경우 std::invalid_argument가 발생합니다.
C++
   // C++ program to demonstrate that we can construct bitset using    // alternate characters for set and unset bits.    #include             #include            #include             int     main  ()      {         // string constructor using custom zero/one digits       std  ::  string     alpha_bit_string     =     'aBaaBBaB'  ;         std  ::  bitset   <  8  >     b1  (  alpha_bit_string       0       alpha_bit_string  .  size  ()         'a'       'B'  );     // [01001101]       std  ::  cout      < <     b1      < <     'n'  ;      }      

산출:

01001101 

3. N 비트를 0과 1의 C 스타일 문자열에 제공된 문자에 해당하는 값으로 초기화하는 bitset 클래스의 개체를 생성합니다. 문자열을 문자열 유형으로 캐스팅하지 않고 생성자를 호출합니다. 또한 _Str의 어떤 문자가 각각 0비트와 1비트를 의미하도록 해석되는지를 나타내는 두 개의 선택적 매개변수 _Zero 및 _One도 있습니다.

C++
   #include          #include          int     main  ()      {      // char* constructor using custom digits      std  ::  bitset   <  8  >     b1  (  'XXXXYYYY'       8       'X'       'Y'  );     // [0 0 0 0 1 1 1 1]      std  ::  cout      < <     b1      < <     'n'  ;   }   

산출:

00001111 

비트세트 작업

1. std::bitset::to_string()  
비트 세트의 내용을 문자열로 변환합니다. false 값을 가진 비트를 나타내려면 0을 사용하고 true 값을 가진 비트를 나타내려면 1을 사용합니다. 결과 문자열에는 첫 번째 문자가 마지막(N-1번째) 비트에 해당하고 마지막 문자가 첫 번째 비트에 해당하는 N 문자가 포함됩니다. 또한 매개변수를 통해 true 및 false 값을 인쇄하는 데 사용되는 문자를 전달할 수 있습니다.

예:

C++
   // C++ program to demonstrate that we can convert contents   // of bitset to a string.   #include          #include          int     main  ()   {      std  ::  bitset   <  8  >     b  (  42  );      std  ::  cout      < <     b  .  to_string  ()      < <     'n'       < <     b  .  to_string  (  '*'  )      < <     'n'       < <     b  .  to_string  (  'O'       'X'  )      < <     'n'  ;   }   

산출:

00101010 **1*1*1* OOXOXOXO 

2. stz::비트.  
비트 세트의 내용을 부호 없는 긴 정수로 변환합니다. 비트 세트의 첫 번째 비트는 숫자의 최하위 숫자에 해당하고 마지막 비트는 최상위 숫자에 해당합니다. 값을 unsigned long으로 표현할 수 없으면 함수는 std::overflow_error를 발생시킵니다.

예:

C++
   // C++ program to demonstrate that we can get value of bitset   // as unsigned long integer.   #include          #include              int     main  ()   {      std  ::  bitset   <  5  >     b  (  5  );      std  ::  cout      < <     b  .  to_ulong  ()      < <     'n'  ;      }   

산출:

5