C++ 标准里面定义的初始化bitset对象的方法有:
bitset<n> b(u);
其中n为位数,u为unsigned long型。
最近遇到一个问题,需要求一个输入整数中的二进制1的个数。
如输入 int 5,在内存中的存储形式为00000000000000000000000000000101,二进制1的个数为2;
int -5, 在内存中的存储形式为1111111111111111111111111111011,二进制1的个数为31;
于是自然想到了C++的bitset类型,就遇到了 bitset不能用unsigned long初始化的问题。
在此做一下笔记——VS2010的bitset比较另类。
其实用long型初始化解决上面的二进制1的个数统计问题,更方便。
代码如下,仅供参考:
#include <iostream>
#include <bitset>
using namespace std;
using std::bitset;
int main()
{
unsigned long num;
int flag = 0;
cin>>num;
bitset<32> bitvec(num);
cout<<bitvec<<endl;
size_t bits_set=bitvec.count();
cout<<bits_set<<endl;
//while(1);
}