[C++] bitset 라이브러리 활용: 2진수 변환 및 응용

wansuper·2024년 1월 1일
0

CodingTest

목록 보기
24/34
#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;
}

bitset 라이브러리 활용

- 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의 개수 반환) 
profile
🚗 Autonomous Vehicle 🖥️ Study Alone

0개의 댓글