顾名思义,bitset是位bit的set集合,是可以当做容器使用的一种数据结构。 bitset提供了一些很实用的方法,能用来替代C语言的直接按位运算带来的不便。
#include <string>
#include <bitset>
int main()
{
std::bitset<5> bs1; //00000,无参默认0
std::bitset<5> bs2(4); //00100,整数转二进制,参数可为16进制
std::bitset<5> bs3("0011"); //00011,字符串转二进制,缺则补0,多则截断
bs1.reset(); //00000, 全清空
bs1.set(); //11111, 全置1
bs1.set(0, 0); //11110, 第0位置0
bs1.set(0, 1); //11111, 第0位置1
bs1.reset(1); //11101,第1位重置
bs1 ^= 0b11111; //00010, 参与位运算
bs1[0] = 1; //00011,下标访问
bs1.flip(0); //00010,翻转第0位,无参表示全翻转
bool isOne = bs1.test(0); //false,第0位是否1
bool isAllOne = bs1.all(); //false,是否全为1
bool isAnyOne = bs1.any(); //true,是否有一位是1
bool isAllZero = bs1.none(); //false,是否全为0
size_t i = bs1.count(); // 1, 1的个数
size_t s = bs1.size(); // 5, 容量
std::string str = bs1.to_string(); //"00010",转字符串
unsigned long l = bs1.to_ulong(); //2,转无符号long
unsigned long long ll = bs1.to_ullong();//2,转无符号long long
return 0;
}
总结
使用bitset来替代直接的位运算或辅助位运算,能增强可阅读性,减少疏忽带来的影响。