//标准库bitset类型
//bitset头文件:#include<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中含有的位串的副本
//bitset<n> b(s,pos,n) b是s中从位置pos开始的n个位的副本
//biset<n> b(s,n) b是s中从起始位置开始的总共n位的副本
/*bitset的初始化规则: 在给出的unsigned long 值比bitset类型长度大的话,舍弃unsigned long值得高阶位;
* 若给出的unsigned long 值比bitset类型长度小的话, 则bitset的其余位将置为0;
* 若给出的unsigned long 值与bitset类型长度一样的话,则正好放置所有位
*/
//bitset对象的基本操作:
//b.any() b中是否存在置为1的二进制位?
//b.none() b中不存在置为1的二进制位?
//b.count() b中置为1的二进制位的个数
//b.size() b中二进制位的个数
//b[pos] 访问b中在pos处的二进制数
//b.test(pos) b中在pos位置处的二进制数是否为1?
//b.set() 把b中所有二进制位都置为1
//b.set(pos) 把b中在pos位置的二进制数置为1
//b.reset() 把b中所有二进制位数都置为0
//b.reset(pos) 把b中在pos位置的二进制数置为0
//b.filp() 把b中所有的二进制数全都取反
//b.filp(pos) 把b中在pos位置的二进制数取反
//b.to_ulong() 用b中同样的二进制位返回一个unsigned long值
//os << b 把b中的位集输出到os流中
#include<iostream>
#include<bitset>
#include<cstddef>
using namespace std;
int main(void)
{
//举例
bitset<32> bitvec; //默认全都置为0
bool is_set = bitvec.any();
//b.none()返回的是布尔类型即true和false
bool is_not_set = bitvec.none();
//b.count()返回的是size_t类型
size_t sz = bitvec.size();
//b[pos]下标的访问
for (int index = 0;index != 32;index += 2)
bitvec[index] = 1;
//b.set(pos)重新设定某位置的二进制数
for (int index = 0;index != 32;index += 2)
bitvec.set(index);
//b.reset(pos)重新设定某位置的二进制数
for (int index = 0;index != 32;index += 2)
bitvec.reset(index);
//测试某个二进制位是否为1
for (size_t pos = 0;pos != bitvec.size();++pos) {
if (bitvec.test(pos))
cout << "True!" << endl;
/*
if(bitvec[pos])
cout<<"True!"<<endl;
*/
//某位置位取反操作
bitvec.flip(pos);
// bitvec[pos].flip();
}
//整体取反操作
bitvec.flip();
//获取bitvec对象的值
//注意: 只有当bitset类型长度小于或等于unsigned long的长度时,才可以使用to_ulong操作
unsigned long ulong = bitvec.to_ulong();
cout << "ulong = " << ulong << endl;
//输出二进制位
bitset<32>bitvec2(0xffff);
cout << "bitvec2: " << bitvec2 << endl;
//bitset也支持位操作符运算
cout << "bitvec2: " << (bitvec2 << 2) << endl;
return 0;
}
标准库类型bitset类型
最新推荐文章于 2023-03-21 18:51:36 发布