bitset 用法

参考地址:http://blog.csdn.net/phdhoss/article/details/4225221

1.bitset基本用法:

 

   #include <iostream>
#include <bitset>
using namespace std;

int main ()
{
  bitset<16> mybits;

  cout << "enter a binary number: ";
  cin >> mybits;

  if (mybits.any())
    cout << "mybits has " << (int)mybits.count() << " bits set./n";
  else cout << "mybits has no bits set./n";

  return 0;
}

 

2.count用法

   size_t count ( ); //返回mybits中1的个数

 

3.flip用法

  bitset<N>& flip ( );               //返回mybits的反码
  bitset<N>& flip ( size_t pos );    //将从右边数第pos个元素取反码

 

  样例代码:

  #include <iostream>
  #include <string>
  #include <list>
  #include <vector>
  #include <algorithm>
  #include <map>
  #include <set>
  #include <bitset>
  #define    Elem    int
  using  namespace  std;
  int  main()
  {
    bitset<10>  mybits(string("1010101000"));
    cout<<mybits.flip(2)<<endl;
    cout<<mybits.flip()<<endl; 
    return  0;
  }

 

4.none的用法:

 

  bool none ( ) const;

 

  注: 如果mybits中没有1,返回ture;如果mybits中有1,返回false.

 

5.[]用法:

  样例代码:

  #include <iostream>
#include <bitset>
using namespace std;

int main ()
{
  bitset<4> mybits;

  mybits[1]=1;             // 0010
  mybits[2]=mybits[1];     // 0110

  cout << "mybits: " << mybits << endl;

  return 0;
}

 

6.reset用法

 

bitset<N>& reset ( );             //将mybits中的所有位置0
bitset<N>& reset ( size_t pos );  //将从右数索引为pos的位置0

 

7.set用法

 

bitset<N>& set ( );               //将mybits的所有位置1
bitset<N>& set ( size_t pos, bool val = true );//将从右数索引为pos的位置val(1或0)

 

8.size用法
 

  size_t size() const;           //返回mybits的位数

 

9.test用法

 

  bool test ( size_t pos ) const;//如果从右数索引为pos的位置为1,返回true,否则返回false

 

10.to_string和to_ulong的用法

 

   注:将二进制数转化为string型或usigned long型

   样例代码(to_string):

   #include <iostream>
   #include <string>
   #include <list>
   #include <vector>
   #include <algorithm>
   #include <map>
   #include <set>
   #include <bitset>
   #define    Elem    int
   using  namespace  std;
   int  main()
   {
     string mystring;
     bitset<4> mybits;     // mybits: 0000

     mybits.set();         // mybits: 1111

     mystring=mybits.to_string();

     cout << "mystring: " << mystring << endl;

     return  0;
   }

 

   样例代码(to_ulong):

   #include <iostream>
   #include <string>
   #include <list>
   #include <vector>
   #include <algorithm>
   #include <map>
   #include <set>
   #include <bitset>
   #define    Elem    int
   using  namespace  std;
   int  main()
  {
    bitset<4> mybits;     // mybits: 0000
    mybits.set();         // mybits: 1111
    cout << mybits<<"as an integer is: " << mybits.to_ulong()<< endl;
    return  0;
  }

常用的成员函数:
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.flip( ) 把b中所有二进制位逐位取反
b.flip( pos ) 把b中在pos处的二进制位取反
b.to_ulong( ) 把b中同样的二进制位返回一个unsigned

os << b 把b中的位集输出到os流


例题应用:

poj3748 位操作 做的我恶心的一道水题 3种方法

分类: 模拟 89人阅读 评论(0) 收藏 编辑 删除
位操作
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 7737   Accepted: 3035

Description

假设你工作在一个32位的机器上,你需要将某一个外设寄存器的第X位设置成0(最低位为第0位,最高位为第31位),将第Y位开始的连续三位设置成110(从高位到低位的顺序),而其他位保持不变。对给定的寄存器值R,及X,Y,编程计算更改后的寄存器值R。

Input

仅一行,包括R,X,Y,以逗号","分隔,R为16进制表示的32位整数,X,Y在0-31之间且Y>=3,(Y-X)的绝对值>=3,保证两次置位不会重合

Output

更改后的寄存器值R(16进制输出)

Sample Input

12345678,0,3

Sample Output

1234567c

Source

方法一:  用系统函数 bitset

#include<iostream>
#include<stdio.h>
#include<bitset>
using namespace std;
int main()
{
    int n,x,y;
    while(scanf("%x,%d,%d",&n,&x,&y)!=EOF)
    {
        bitset<32> haha(n);//n为32位的话 最低位为第0位,最高位为第31位
        haha.set(x,0);
        haha.set(y,1);
        haha.set(y-1,1);
        haha.set(y-2,0);
        printf("%x\n",haha.to_ulong());

    }
    return 0;
}



你可能感兴趣的:(Algorithm,String,vector,模拟,Integer,iostream,output)