顾名思义,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来替代直接的位运算或辅助位运算,能增强可阅读性,减少疏忽带来的影响。