棘手的bitset应用程序,输出错误

时间:2014-01-21 07:12:34

标签: c++ bit-manipulation bit

我编写了一些代码,需要计算大小为10 ^ 19的数字中的设置位数。由于我使用的是c ++,我使用unsigned long long int来存储数字。我为它编写了两个版本,一个使用bitset,一个使用bitset。

    unsigned long long int b;
    cin>>b;
    int cnt=0;
    while(b){
        if(b&1)cnt++;
        b>>=1;
    }

上面的代码给出了正确的结果。但是下面使用bitset的代码给出了不正确的结果。虽然看起来它应该以完全相同的方式工作。

    unsigned long long int b;
    cin>>b;
    bitset<64>foo(b);
    int cnt=foo.count();

请注意,unsigned long long int将适合64位,因为10 ^ 19 <2 ^ 64.一些额外的细节:因此问题文本不会变得难看,我将完整的代码添加为ideone链接,注意第51至57行http://ideone.com/4Yamhz

1 个答案:

答案 0 :(得分:0)

根据http://www.cplusplus.com/reference/bitset/bitset/bitset/

C ++ 98中bitset的构造函数允许unsigned long。相反,C ++ 11允许使用unsigned long long。可能截断?你没有提到你使用的编译器,所以你去...