C++ 标准库 bitset类型


C++ 标准库 bitset类型

有些程序要处理二进制位的有序集,每个位可能包含的是0(关)或1(开)的值。位是用来保存一组项或条件的yes/no信息(有时也称标志)的简洁方法。标准库提供了bitset类使得处理位集合更容易一些。要使用bitset类就必须要包含相关的头文件。

1,bitset对象的定义和初始化

#include<iostream>
#include<bitset>
#include<string>
using namespace std;
int main()
{
	bitset<32> a;//初始化默认32个0
	bitset<32> b(0xffff); //前16个为0,后16个为1 
	bitset<16> c(0xffff);//十六进制转换二进制为16个1 
	bitset<32> d(156);//156是十进制,输出后转换为二进制 10011100,然后在前面补0,够32位 
	string str("1010000011100000000001001");
	bitset<32> e(str);
	bitset<32> f(str,5,4);//表示从str的前面开始数,数到5个,第五个后的四位作为f32位的最后4位,前面补0 
	bitset<32> g(str,str.size() - 4);//表示用str的最后4位作为g的最后四位 
 	cout << a << endl;
	cout << b << endl;
	cout << c << endl;  
	cout << d << endl;
	cout << e << endl; 
	cout << f << endl; 
	cout << g << endl; 
	return 0;
}

2,bitset对象的操作

#include<iostream>
#include<bitset>
#include<string>
using namespace std;
int main()
{
	bitset<32> b(156);
	bool is_set = b.any();//b中是否存在置为1的二进制位?
	bool is_not_set = b.none();//b中不存在置为1的二进制位?
	bool is_one = b.test(3);//第3位是否为1 
	if(is_set)
	{
		cout << "b中至少有1个1" << endl; 
	}
	if(is_not_set)
	{
		cout << "b中没有1" << endl;
	}
	if(is_one)
	{
		cout << "第3位为1" << endl; 
	} 
	size_t  b_num = b.count();//b中置为1的二进制位的个数
	cout << "b中1的个数" << b_num << endl; 
        cout << "b中0的个数" << b.size() - b_num << endl; //b.size()表示b中二进制数的个数 
        b[0] = 1;//从后面数第一位是0,后面依次1,2,3...... 
	cout << b << endl; 
	b.set(15);//第15位置1 
	cout << b << endl;
	b.set();//全部置1
	b.reset(15);// 第15位置0
	b.reset();//全部置0 
	b.flip();//全部取反
	b.flip(13);//第13位取反 
	return 0;
}

3,bitset的逻辑运算

#include<iostream>
#include<bitset>
using namespace std;
int main()
{
	bitset<8> b(0xff);
	bitset<8> a(0xaf);
	cout << a << endl;
	cout << b << endl;
	cout << (a&b) << endl; //位与 
	cout << (a|b) << endl; //位或 
	cout << (a^b) << endl; //位异或 
	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值