반응형

- 비트셋(Bitset)이란?


원하는 비트 몇 개를 쓰기 위한 bitset STL이다. 


이때 0이면 채워지지 않은 것, 1이면 채워진 것이다. 


비트 연산을 잘 이해하고 있을 때 비트셋까지 알고 있다면 비트에 관한 내용을 쉽게 다룰 수 있다.



- 비트셋(Bitset)이용 방법 및 함수


#include <bitset>를 이용


bitset<개수> 이름; :: bitset 선언


bit.set() :: 전체 비트를 1로 셋팅


bit.set(n, true/false) :: n+1번째 비트를 1또는 0으로 셋팅


bit.reset() :: 전체 비트를 0으로 리셋


bit.size() :: bitset의 크기를 구한다.


bit.any() :: 비트셋 중 하나라도 1이면 1을 반환, 모두 0일때만 0을 반환


bit.none() :: 비트셋 중 모두가 0이어야 1을 반환


bit.flip() :: 전체 비트를 반전


bit.flip(n) :: n+1번째 비트를 반전


bit.test(n) :: n+1번째 비트를 검사(1인지 0인지)


bit.to_string() :: 전체 비트를 string화 시킨다.


bit.to_ulong() / bit.to_ullong() :: 전체 비트를 unsigned long / unsigned long long 의 값으로 바꿔준다.


bit.test[4] == bit[4] :: 배열처럼 이용이 가능하다.







간단한 문제를 풀어보려면

http://www.crocus.co.kr/550 를 참조하면 된다.



- 소스 코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <bitset>
#include <string>
#include <iostream>
 
using namespace std;
 
int main()
{
    // bitset을 선언, 총 10개의 비트를 의미한다.
    bitset<10> bit;
 
    // 전체 비트를 0으로 리셋한다.
    bit.reset();
    cout << "bit.reset() :: " <<  bit << endl;
 
    // 전체 비트를 1로 셋팅한다.
    bit.set();
    cout << "bit.set() :: " << bit << endl;
 
    // 비트셋으로 선언한 bit의 할당된 수를 구한다
    int size = (int)bit.size();
    cout << "bit.size() :: " << size << endl ;
 
    // 비트셋중 하나라도 1이면 1을 반환, 모두 0이면 0을 반환한다.
    // 현재는 bit.set()로 인해 모두 1이다.
    cout << "bit.any() :: " << bit.any() << endl;
 
    // 0으로 리셋
    bit.reset();
    cout << "bit.reset() :: " << bit.reset() << endl;
    // 현재는 0으로 모두 리셋이 되었으니 0이 출력된다.
    cout << "bit.any() :: " << bit.any() << endl;
 
    // 4번째 비트 반전
    bit.flip(3); 
 
    // 하나라도 1이면 bit.any()는 1이되니 bit.none()는 0이된다.
    cout << "bit.none() :: " << bit.none() << endl << endl;
 
    // 현재 비트 구성 확인
    cout << "bit state :: " << bit << endl;
 
    // 첫번째 비트는 true, 네번째 비트는 false 할당
    bit.set(0true);
    bit.set(3false);
 
    cout << "bit.set(0, true), bit.set(3, false); " << bit << endl;
 
 
    // 첫번째 비트 검사
    cout << "bit.test(0) :: " << bit.test(0<< endl;
 
    // 다섯번째 비트 검사(배열형식으로도 가능하다.)
    cout << "bit[4] :: " << bit[4<< endl;
 
    // 현재 비트 출력
    cout << "bit state :: " << bit << endl;
 
    // 모든 비트 반전
    cout << "bit.flip() :: " << bit.flip() << endl << endl;
 
    // 비트를 string으로 변환
    string str = bit.to_string();
    cout << "bit.to_string() :: " << str << endl;
 
    // string에 제대로 들어가는지 확인
    str += "crocus";
    cout << "str += \"crocus\" :: " <<  str << endl;
 
    // 비트를 숫자로 변환
    cout << "bit.to_ulong() :: " << bit.to_ulong() << endl;
 
    return 0;
}
 
//                                                       This source code Copyright belongs to Crocus
//                                                        If you want to see more? click here >>
Crocus


반응형