C++ STL 시리즈
4 / 5
C++ 17을 기준으로 cppreference를 참고하여 작성했습니다.
std::bitset
고정된 크기를 갖는 변수를 값으로 쓰지 않고 비트 플래그의 집합으로 쓰는 상황에서 사용할 수 있는 클래스 템플릿이다. 비트 연산자를 지원한다.
정수값을 인자로 넣을 수도 있지만 문자열도 가능하다. 문자가 의미하는 값을 주입해야한다.
예시
#include <iostream>
#include <bitset>
int main()
{
std::bitset<8> zero;
std::bitset<8> number(42ULL);
std::bitset<8> text("10110010");
std::bitset<8> copied(text);
std::cout << "zero\t : " << zero << std::endl;
std::cout << "number\t : " << number << std::endl;
std::cout << "text\t : " << text << std::endl;
std::cout << "copied\t : " << copied << std::endl;
std::cout << "number.all()\t : " << number.all() << '\n';
std::cout << "number.any()\t : " << number.any() << '\n';
std::cout << "number.none()\t : " << number.none() << '\n';
std::cout << "number.count()\t : " << number.count() << '\n';
for (int i = 0; i < number.size(); i++) {
std::cout << "number.test("<<i<<")\t : " << number.test(i) << '\n';
}
std::cout << std::endl;
std::cout << "before shifted left, number is " << number.to_string() << std::endl;
number <<= 2;
std::cout << "after shifted left, number is " << number.to_string() << std::endl;
std::cout << std::endl;
std::cout << "before OR 0xFF, number is " << number.to_string() << std::endl;
number |= 0b00001111;
std::cout << "after OR 0xFF, number is " << number.to_string() << std::endl;
return 0;
}
zero : 00000000
number : 00101010
text : 10110010
copied : 10110010
number.all() : false
number.any() : true
number.none() : false
number.count() : 3
number.test(0) : false
number.test(1) : true
number.test(2) : false
number.test(3) : true
number.test(4) : false
number.test(5) : true
number.test(6) : false
number.test(7) : false
before shifted left, number is 00101010
after shifted left, number is 10101000
before OR 0xFF, number is 10101000
after OR 0xFF, number is 10101111