首页 > 编程知识 正文

bitset<8> b1(15),bitset原理

时间:2023-05-04 09:01:32 阅读:262945 作者:1828

bitset std::bitset

这个集合描述的是数值的每一个位,它的值为0或者1
要使用位集合,需要添加头文件
#include <bitset>
bitse是一个模板类,原型如下

template <size_t N> //N对应待处理的位数class bitset{...}std::bitset<32> i;std::bitset<sizeof(int)> i;

严格来说,bitset并不属于stl容器的范畴,它也不支持指示器的操作。bitset提供了对数据的位操作。
以前将一个int值的第7位修改为1,可能需要写成

//这样的操作不清晰int i = 1;i |= 128;//改为bitset处理std::bitset<32> i;i = 1;std::cout << i << std::endl;i[7] = 1;std::cout << i << std::endl;

bitset提供的操作函数

函数含义test(i)测试i位的值是否为真(为1)set(i)设置第i位为1reset(i)设置第i位为0set()将所有为设置为1reset()将所有为设置为0flip(i)翻转第i位,0->1, 1->0flip()翻转所有位any()判断集合中是否包含1none()判断集合中是否全为0cout()获取被设置的位的数目size()获取所有的位的数目Effective STL

第18条: 避免使用vector

vector<bool>它有两点不对

它不是一个stl容器它并不存储bool //vector内存储的T,一般支持如下操作T *p = &c[0];//但对于vector<bool>vector<bool> v;bool* q = &v[0];//编译不过

原因 vector<bool>是一个假容器,它并不真的存储bool,相反,为了节省空间,它存储的是bool的紧凑表示,
sizeof(bool) = 1,在一个典型的vector中,存储的bool仅仅占一个二进制位,实际上一个bool大小的空间可以
存储8个bool。在内部,vector<bool>使用了与位域一样的思想来表达它所存储的那些bool。
位域和bool类似,它的值只有两个可能,但bool和位域之间有一个很重要的区别,你可以创建一个指向bool的指针,
但是不能创建一个指向位域的指针。指向单个位的引用也是被禁止的。
考虑取一个容器元素的地址,会产生一个指向容器元素类型的指针,在vector<bool>中是不行的。

替代std::vector的方法

使用std::deque使用std::bitset

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。