c++ 随记:bitset测试

5 篇文章 0 订阅

头文件

#include <bitset>

常用方法

构造

std::bitset<8> foo; //长度建议为8的倍数
std::bitset<8> bar (0x14);
std::bitset<8> baz (std::string("11011101"));

访问

 reference operator[](size_t __position)
 bool operator[](size_t __position)
 bool test(size_t __position) const

设置

 set();//全部设置为1
 set(size_t __position, bool __val = true)//设置某一位为1或者0
 reset()//全部设置为0
 reset(size_t __position) //重新设置某一位
 flip() //全部反转
 flip(size_t __position) //反转某一位

长度

 size_t count();// 含1个数
 size_t  size();//全部,即长度

类型转换

 to_string()
 to_ulong()
 to_ullong()

其他

bool any() ;//是否有任何被设置为1
bool none() ;//是否都没有被设置为1
bool all() ;//是否都被设置为1

操作符

|  // 或
& //与
~ //取反
^ //即相应位的值相同的,结果为 0,不相同的结果为 1
<< //左移位
>> //右移位

测试

int main()
{
    std::bitset<8> foo;
    foo[0]=1;
    foo[3]=1;
    foo[4]=1;
    std::cout << foo << std::endl;
    std::cout <<"count:"<<foo.count()<<" size:"<<foo.size()<<std::endl;

    std::cout << foo.test(0) <<" "<< foo.test(1) << " "<<foo[4]<<std::endl;

    std::cout <<"any:" <<foo.any()<<" none:"<<foo.none()<<" all:"<<foo.all()<< std::endl;

    foo.set();
    std::cout << foo << std::endl;
    foo.reset();
    std::cout << foo << std::endl;
    foo.set(2,1);
    std::cout << foo << std::endl;
    foo.set(2,0);
    std::cout << foo << std::endl;
    foo.set(1);
    std::cout << foo << std::endl;
    foo.reset(1);
    std::cout << foo << std::endl;
    foo.set(1);
    foo.flip();
    std::cout << foo << std::endl;
    foo.flip(1);
    std::cout << foo << std::endl;
    foo.flip(2);
    std::cout << foo.to_string() << " " << foo.to_ulong() <<" "<< foo.to_ullong() << std::endl;
}

测试结果

00011001
count:3 size:8
1 0 1
any:1 none:0 all:0
11111111
00000000
00000100
00000000
00000010
00000000
11111101
11111111
11111011 251 251

位操作符号测试

    foo.reset();
    foo.set(0);
    foo = foo << 3;
    std::cout << foo << std::endl;
    auto foo1 = foo;
    foo = ~foo ;
    foo.set(1,0);
    std::cout << foo << std::endl;
    auto foo2 = foo ^ foo1;
    std::cout << foo2 << std::endl;
    auto foo3 = foo | foo1;
    std::cout << foo3<< std::endl;

    auto foo4 = foo & foo1;
    std::cout << foo4<< std::endl;

测试结果

00001000
11110101
11111101
11111101
00000000
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值