bitset用法

bitset对于二进制的操作实在是easy,加上在写遗传算法时候要用得到,所以整理下,以便以后使用

bitset除了可以访问指定下标的bit位以外,还可以把它们作为一个整数来进行某些统计。

  可以如下声明一个该类型变量:
  bitset<N>varm (M)
  其中varm为变量名。
  N表示该类型在内存中占的位数,是二进制。

  M表示变量varm的初始值。

要使用bitset 类我们必须包含相关的头文件#include <bitset>;

bitset< 32 > bitvec;声明了一个含有32 个位的bitset 对象位的顺序从0 到31 缺省情况下所有的位都被初始化为0;

bitset用法_第1张图片

当int值变为bitset二进制操作完后,可以用to_ulong函数再变回int值

如 int  a=3;

    bitset<5>v(a);

    v.reset(2);

    a= v.to_ulong();              //重新得到a的值
至于两个bitset值得合并(在遗传算法中有很大作用)

  1. #include <bitset>
  2. #include <iostream>
  3. #include <string>
  4. #include <iostream>
  5. #include "afxwin.h"
  6. using namespace std;
  7. int main(){
  8.     bitset<4> bits1("1111");
  9.     bitset<4> bits2("0000");
  10.     int i = bits1.size()+bits2.size();
  11. //  bitset<i> bits3;   //不能使用动态参数作为模板参数,能不能想办法解决?
  12.     bitset<128> bits3;
  13.     int j=0;
  14.     for (j=0;j<bits1.size();j++)
  15.     {
  16.         if (bits1[j]==1)
  17.             bits3.set(j);
  18.     }
  19.     for (j=bits1.size();j<bits1.size()+bits2.size();j++)
  20.     {
  21.         if (bits2[j-bits1.size()]==1)
  22.         {
  23.             bits3.set(j);
  24.         }
  25.     }
  26.     cout<<bits3<<endl<<bits3.to_ulong()<<endl;
  27.     return 0;
  28. }


























  

你可能感兴趣的:(算法)