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

tricky bitset application,error in output

本文关键字:输出 错误 应用程序 BITSET      更新时间:2023-10-16

我编写了一些代码,这些代码需要计算一个数字中的设置位数量为10^19。当我使用的是C 时,我使用了无符号的长long int来存储数字。

    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();

请注意,未签名的长时间int将适合64位,为10^19&lt; 2^64.一些额外的细节:使问题文本毫不丑陋,我将完整的代码添加为IDEONE链接,请注意。第51至57行http://ideone.com/4yamhz

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

C 98中的BITSET的构造函数允许长时间的未签名。C 11取而代之的是长期未签名。截断也许?您没有提及您使用的编译器,所以您去了...