bitset

#include   <iostream>
 #include   <fstream>
 #include   <bitset>

 using   namespace   std;

 int   main()   {
                 bitset <8>   b(10100111);
                
                 bitset <8>   bb;
                 ofstream   ofs( "1.txt ",   ios::binary);
                 ofs.write((char*)&b,   sizeof(b));   //写入   b
                 cout < < "b: " < <b < <endl;
                 ofs.close();

                 ifstream   ifs( "1.txt ",   ios::binary);
                 ifs.read((char*)&bb,   sizeof(bb));
                 cout < < "bb: " < <bb < <endl;
                 ifs.close();
 }

标准库中 bitset类型用来处理二进制位的有序集, bitset类型简化了位集的处理,使用 bitset时需要包含头文件 #include<bitset>

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

bitset也是类模板,不过 bitset类型对象之间的区别在于长度而不是类型,因此 bitset模板的参数是长度类型

初始化方法

说明

bitset<n> b;

b n位,每位都为 0

bitset<n> b(u);

b unsigned long u的一个副本

bitset<n> b(s);

b string对象 s中含有的位串的副本,s是01串

bitset<n> b(s, pos, n);

b s中从位置 pos开始的 n个位的副本

 

2、 unsigned long值初始化 bitset对象

unsigned long值初始化 bitset对象的时候,将 long值转化为二进制模式,然后拷贝到 bitset的右方( bitset右边为低阶位,左边为高阶位), string位数多了将被截断,少了 bitset将在前面补零。

3、 string对象初始化 bitset对象

string对象初始化 bitset对象,需要注意的是,复制拷贝相当于从 string位模式平移到了 bitset

例如:

string str ”11001010”);

bitset<32> bitvec(str);

这个时候, bitvec是这样的: 0000 0000 0000 0000 0000 0000 1100 1010最右边是 bitset的低阶位,即 bitvec[0] bitset[1] …

4 bitset对象上的操作

操作调用方式

操作说明

b.any()

测试 b中是否有存在 1的位

b.none()

测试 b中是否全 0

b.count()

测试 b中置 1的位个数

b.size()

b中所有二进制位个数

b[pos]

访问下标为 pos位置的位值

b.test(pos)

测试 pos位置的二进制位是否为 1

b.set()

b所有位置 1

b.set(pos)

b pos位置的位置 1

b.reset()

b所有位置置 0

b.reset(pos)

b pos位置的位置 0

b.flip()

b中所有位翻转

b.flip(pos)

b pos位置上的位翻转

b.to_ulong()

b转化为 unsigned long

os << b

b的位集合直接输出到 os

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值