<bitset>头文件简介

来源:互联网 发布:微信现场抽奖软件 编辑:程序博客网 时间:2024/05/19 19:41

< 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;}

截图
Markdown


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;}
原创粉丝点击