bitset对于二进制的操作实在是easy,加上在写遗传算法时候要用得到,所以整理下,以便以后使用
bitset除了可以访问指定下标的bit位以外,还可以把它们作为一个整数来进行某些统计。
可以如下声明一个该类型变量: bitset<N>varm (M) 其中varm为变量名。 N表示该类型在内存中占的位数,是二进制。M表示变量varm的初始值。
要使用bitset 类我们必须包含相关的头文件#include <bitset>;
bitset< 32 > bitvec;声明了一个含有32 个位的bitset 对象位的顺序从0 到31 缺省情况下所有的位都被初始化为0;
当int值变为bitset二进制操作完后,可以用to_ulong函数再变回int值
如 int a=3;
bitset<5>v(a);
v.reset(2);
a= v.to_ulong(); //重新得到a的值
至于两个bitset值得合并(在遗传算法中有很大作用)
- #include <bitset>
- #include <iostream>
- #include <string>
- #include <iostream>
- #include "afxwin.h"
- using namespace std;
- int main(){
- bitset<4> bits1("1111");
- bitset<4> bits2("0000");
- int i = bits1.size()+bits2.size();
- // bitset<i> bits3; //不能使用动态参数作为模板参数,能不能想办法解决?
- bitset<128> bits3;
- int j=0;
- for (j=0;j<bits1.size();j++)
- {
- if (bits1[j]==1)
- bits3.set(j);
- }
- for (j=bits1.size();j<bits1.size()+bits2.size();j++)
- {
- if (bits2[j-bits1.size()]==1)
- {
- bits3.set(j);
- }
- }
- cout<<bits3<<endl<<bits3.to_ulong()<<endl;
- return 0;
- }