#include <iostream>
#include <bitset>
using namespace std;
bitset <8> bb; // 8 bit 생성
bitset <8> tt;
bitset <8> dd;
bitset <8> cc;
int main()
{
// 특징:
// 1. 기존 배열이나 문자열과 다르게 맨 뒤를 0부터 시작하여 역순으로 접근한다.
// 2. bitset은 '[]' 연산자를 사용하여서 접근하여 읽기, 쓰기를 할 수 있다.
bb.reset(); // bb = 00000000 (reset(): 8개의 비트 모두 0으로 리셋)
bb.all(); // false (all(): 모든 비트가 1인가?)
bb.any(); // false (any(): 한 비트라도 1이 있는가?)
bb.none(); // true (none(): 1인 비트가 하나도 없는가?)
bb.set(); // bb = 11111111 (set(): 8개의 비트 모두 1로 셋)
bb.flip(); // bb = 00000000 (flip(): 비트 반전)
bb = 13; // bb = 00001101
bb.flip(); // bb = 11110010
bb.flip(2); // bb = 11110110
bb = 3; // bb = 00000011
tt = bb; // tt = 00000011
tt.set(5); // tt = 00100011 (매개변수 비우면 전부 1, 있으면 해당 인덱스 1로 셋)
// <주의: 0부터 셈>
dd.reset(); // dd = 00000000
cc = (bb ^ tt); // cc = 00100000 (XOR 연산: 두 비트가 같으면 1 반환)
dd[5] = 1; // dd = 00100000 (dd의 5번째 비트에 1 넣음)
dd = dd >> 2; // dd = 00001000 (오른쪽으로 2번 shift)
bb = bitset<8>("00101100"); // bb = 00101100
cc = bitset<8>(13); // cc = 00001101
string s = bb.to_string(); // s = "00101100"
// bitset은 string, unsigned long, unsigned long long형으로 바꿀 수 있음
unsigned long ul = bb.to_ulong(); // to_ulong() : unsigned long형
unsigned long long ull = bb.to_ullong();// to_ullong(): unsigned long long형
cc.reset(0); // cc = 00001100
unsigned long ki = cc.to_ulong(); // ki = 12
int c = cc.count(); // c = 2 (cc의 비트 중 1의 개수 반환)
return 0;
}
- reset(): (숫자 지정 X이면) 모든 비트 0으로 리셋 (괄호 내 index도 가능)
- set(): (숫자 지정 X이면) 모든 비트 1로 셋 (괄호 내 index도 가능)
- all(): 모든 비트가 1인가?
- any(): 한 비트라도 1이 있는가?
- none(): 1인 비트가 하나도 없는가?
- flip(): (숫자 지정 X이면) 비트 반전 (괄호 내 index도 가능)
- bs1 ^ bs2 (XOR 연산): 두 비트가 같으면 1 반환
- bs1[index] = 0 or 1 : 특정 index 변환
- >>, << (shift 연산)
- bitset 바로 선언하기
bb = bitset<8>("00101100"); // bb = 00101100 cc = bitset<8>(13); // cc = 00001101
- bitset은 string, unsigned long, unsigned long long형으로 바꿀 수 있음
- to_string()
- to_ulong()
- to_ullong()
bb = bitset<8>("00101100"); // bb = 00101100 string s = bb.to_string(); // s = "00101100" unsigned long ul = bb.to_ulong(); // to_ulong() : unsigned long형 unsigned long long ull = bb.to_ullong();// to_ullong(): unsigned long long형
- count()
int c = cc.count(); // c = 2 (cc의 비트 중 1의 개수 반환)