<bitset>头文件简介
< bitset >头文件bitset是用来存放bit位元素的,由于每个元素(0或1)只占1bit位,因而可以节约空间(相比于8bit位的bool型变量)。在c++ stl中,提供了操作位的容器,使用前包含< bitset >头文件即可。相关操作1.创建bitset对象如bitset<100> b,它能容纳100位比特位,每位上的初始值为0注意:bitset的大小在定义时确定,定义后不能修改2.
·
< bitset >头文件
bitset是用来存放bit位元素的,由于每个元素(0或1)只占1bit位,因而可以节约空间(相比于8bit位的bool型变量)。在c++ stl中,提供了操作位的容器,使用前包含< bitset >头文件即可。
相关操作
1.创建bitset对象
如bitset<100> b,它能容纳100位比特位,每位上的初始值为0
注意:bitset的大小在定义时确定,定义后不能修改
2.设定元素值
- 下标法,b[i],下标i的取值从0到n-1
- b.set(),对b中所有元素设置为1(默认为0)
- b.reset(), 对b中所有元素设置为0
- b.set(pos,val) 等价于 b[pos]=val
- b.reset(pos) 等价于b[pos]=0
3.其他操作
操作 | 功能 | 用法 |
---|---|---|
test(pos) | pos位是否为1? | b.test(4) |
any() | 任意位是否为1? | b.any() |
none() | 是否没有位为1? | b.none() |
count() | 值是1的位数 | b.count() |
size() | 位数 | b.size() |
flip() | 翻转所有位 | b.flip() |
flip(pos) | 翻转pos位 | b.flip(4) |
同样,位运算符 & | ^ ~ << 也适用于bitset
常用以上操作来做集合运算,以减少时间常数
4.输出元素
- 逐个输出,采用下标法:cout<< b[i];
- 整体输出,即全部输出:cout<< b;
5.样例1
#include<bits/stdc++.h>
using namespace std;
int main()
{
bitset<100> b;
cout<<b;
int n;
cout<<endl<<"下面将十进制数转为二进制,请输入十进制数"<<endl;
cin>>n;
int index=0;
while(n)
{
b[index++]=n%2;
n/=2;
}
cout<<"二进制为"<<endl;
for(int i=index-1;i>=0;i--){
cout<<b[i];
}
return 0;
}
6.样例2
#include<bits/stdc++.h>
using namespace std;
const int maxn=30;
int main()
{
bitset<maxn> b1,b2,b3;
for(int i=0;i<maxn;++i){
b1[i]=i%2;
}
cout<<b1<<endl<<endl;
for(int i=0;i<maxn;++i){
b2[i]=(i+1)%2;
}
cout<<b2<<endl<<endl;
b3=b1&b2;
cout<<b3<<endl<<endl;
b3=b3.flip();
cout<<b3<<endl<<endl;
b3=b1^b3;
cout<<b3<<endl<<endl;
return 0;
}
截图
LeetCode 190 Reverse Bits
题目大意
reverse bits of a given 32 bits unsigned interger
For example, given input 43261596 (represented in binary as 00000010100101000001111010011100), return 964176192 (represented in binary as 00111001011110000010100101000000).
思路
bitset存
代码示例
#include<iostream>
#include<bitset>
#include<math.h>
using namespace std;
const int maxn=40;
int main()
{
bitset<maxn> b;
int n;
while(cin>>n)
{
int index=0;
while(n)
{
b[index++]=n%2;
n/=2;
}
unsigned int sum=0;
int k=31;
for(int i=0;i<index;++i){
sum+=b[i]*(int)pow(2,k);
k--;
}
cout<<sum<<endl;
}
return 0;
}
更多推荐
已为社区贡献1条内容
所有评论(0)