[C++]Bitset

강동현·2023년 12월 22일

Unreal Engine/C++

목록 보기
2/2

1. bitset

  • 0 or 1(false or true)의 값을 갖도록 필요한 경우 사용
  • 비트 연산을 위한 여러 멤버 함수들을 지원
  • vector과 유사한 형태
    bitset: 정적 사이즈 or 복잡한 피트 연산 필요 시 사용
    vector: 동적 사이즈 or 복잡한 비트 연산 필요 X 시 사용
  • #include <bits/stdc++.h>

2. bitset 생성

  bitset<10> bit; //0000000000
  bitset<10> bit("1111111111") //문자열 "1111111111"으로 초기화
  bitset<10> bit(64) //10진수 64를 10bit(0001000000)로 변환

3. bitset 초기화

bitset<10> bit = 16; //0000010000
bitset<10> bit = "0000010000"; //0000010000

4. bitset 접근 / 수정

  • [ ]: 배열과 같은 특정 비트 접근
  • reset(): 특정 비트 0 변환 / 인자가 없다면, 모든 비트 0으로 변환
  bit[0] = 0;
  bit.reset(1);
  bit.reset();//인수 생략 시, 전체 0
  • reset(): 특정 비트 1 변환 / 인자가 없다면, 모든 비트 1으로 변환
    bit[9] = 1;
    bit.set(8);
    bit.set();//인수 생략 시, 전체 1

5. 비트 변환

  • to_ulong(): bit 배열을 10진수 ulong 자료형의 값으로 변환
  • to_ullong(): bit 배열을 10진수 ullong 자료형의 값으로 변환
  • to_string(): bit 배열을 string 자료형의 값으로 변환
bitset<10> bit = 64;//0001000000
int n = bit.to_ulong();//64
//int n = bit.to_ullong();//64
string str = bit.to_string();////0001000000

6. 비트 검사

  • all: 모든 bit가 1이면 true, 아니면 false
  • any: 한 bit라도 1이면 true, 아니면 false
  • none: 모든 bit가 0이면 true, 아니면 false
bitset<10> bit = 0;
if (bit.all()) cout << "모두 1이다\n";
else cout << "모두 1이 아니다\n";
if (bit.any()) cout << "0이 아니다\n"; 
else cout << "0이다\n";
if (bit.none()) cout << "0이다\n";
else cout << "0이 아니다\n";
``

7. bitset 탐색

  • count(): bitset 중 1의 개수
  • size(): bitset의 길이
bitset<10> bit = 78;
cout << bit << "\n";
cout << "비트 중 1의 개수 : " << bit.count() << "\n";	// 비트 1의 개수
for (int i = 0; i < bit2.size(); i++) {	// bitset 전체 길이
	cout << bit2[i] << " ";	// 뒤에서부터 접근한다.
}
cout << "\n";
profile
GAME DESIGN & CLIENT PROGRAMMING

0개의 댓글