bitset的使用

bitset的用法及作用

bitset用于对数字的位进行操作,将32位的数字m转换位bitset类型为:
bitset<32> var(m);

方法操作:

1. any()
为了测试bitset 对象是否含有被设置为1的位,我们可以使用any()操作
当bitset对象的一位或多个位被设置为1 时any()返回true
例如,对于bitvec ,如下测试
bool is_set = bitvec.any();
它的结果当然是false。
2. none()
相反,如果bitset 对象的所有位都被设置为0 ,则none()操作返回true
例如,对于bitvec 测试
bool is_not_set = bitvec.none();
结果为true
3. count()
count()操作返回被设置为1的位的个数.
int bits_set = bitvec.count();
4. set()
我们可以用set()操作或者下标操作符来设置某个单独的位
例如,下面的for循环把偶数位设置为1.
for ( int index = 0; index < 32; ++ index )
if ( index % 2 == 0 )
bitvec[ index ] = 1;
5. test()
类似地,测试某个单独的位是否为1 也有两种方式
test()操作。用位置做参数,返回true或false 例如:
if ( bitvec.test( 0 ))// 我们的bitvec[0] 可以工作了!
同样地,我们也可以用下标操作符
cout << "bitvec: positions turned on:\n\t";
for ( int index = 0; index < 32; ++index )
if ( bitvec[ index ] )cout << index << " ";
cout << endl;
6. reset()
要将某个单独的位设置为0 ,我们可以用reset()或下标操作符
下列两个操作都将bitvec的第一位设为0.
// 两者等价都把第一位设置为0
bitvec.reset( 0 );
bitvec[ 0 ] = 0;
我们也可以用set()和reset()操作将整个bitset 对象的所有位设为1 或0 ,只要 调用相应的操作而不必传递位置参数,我们就可以做到这一点.例如
// 把所有的位设置为0
bitvec.reset();
if ( bitvec.none() != true )
// 喔! 错了
// 把所有的位设置为1if ( bitvec.any() != true )
// 喔! 又错了
7. flip()
flip()操作翻转整个bitset 对象或一个独立的位
bitvec.flip( 0 ); // 翻转第一位
bitvec[0].flip(); // 也是翻转第一位
bitvec.flip(); // 翻转所有的位的值
构造方法2,3
还有两种方法可以构造bitset 对象,它们都提供了将某位初始化为1 的方式:
一种方法是为 构造函数显式地提供一个无符号参数。bitset 对象的前N 位被初始化为参数的相应位值,例如:
bitset< 32 > bitvec2( 0xffff );
将bitvec2 的低16 位设为1
下面的bitvec3 的定义
bitset< 32 > bitvec3( 012 );
将第1 和3 位的值设置为1 假设位置从0 开0
因为 012 在c语言中表示八进制数字12即二进制数字“1010”
我们还可以传递一个代表0 和1 的集合的字符串参数来构造bitset 对象如下所示
// 与bitvec3 的初始化等价
string bitval( "1010" );
bitset< 32 > bitvec4( bitval );
bitvec4 和bitvec3 的第1 和3 位都被设置为1 而其他位保持为0
bitvec.set();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值