_bitset_头文件简介

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


上一篇:   TOJ 3515(堆_优先队列)

下一篇:   优先队列简介



评论

登录之后就可以评论 / 回复啦(#^.^#)    点此登录    点此注册

评论列表

暂无评论!快写一条吧(๑′ᴗ‵๑)