Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
棘手的位集应用程序,输出错误 我写了一些代码,需要计算一个数字的集合位数,如10个大数。当我使用C++时,我用未签名的长long int来存储这个数字。我为它写了两个版本,一个使用比特集,一个没有它。< /P> unsigned long long int b; cin>>b; int cnt=0; while(b){ if(b&1)cnt++; b>>=1; }_C++_Bit Manipulation_Bit - Fatal编程技术网

棘手的位集应用程序,输出错误 我写了一些代码,需要计算一个数字的集合位数,如10个大数。当我使用C++时,我用未签名的长long int来存储这个数字。我为它写了两个版本,一个使用比特集,一个没有它。< /P> unsigned long long int b; cin>>b; int cnt=0; while(b){ if(b&1)cnt++; b>>=1; }

棘手的位集应用程序,输出错误 我写了一些代码,需要计算一个数字的集合位数,如10个大数。当我使用C++时,我用未签名的长long int来存储这个数字。我为它写了两个版本,一个使用比特集,一个没有它。< /P> unsigned long long int b; cin>>b; int cnt=0; while(b){ if(b&1)cnt++; b>>=1; },c++,bit-manipulation,bit,C++,Bit Manipulation,Bit,上面的代码给出了正确的结果。但是下面使用位集的代码给出了错误的结果。尽管看起来它应该以完全相同的方式工作 unsigned long long int b; cin>>b; bitset<64>foo(b); int cnt=foo.count(); 无符号长整型b; cin>>b; bitsetfoo(b); int cnt=foo.count(); 注意,无符号long-long int将适合64位,根据 C++98中位集的构造函数

上面的代码给出了正确的结果。但是下面使用位集的代码给出了错误的结果。尽管看起来它应该以完全相同的方式工作

    unsigned long long int b;
    cin>>b;
    bitset<64>foo(b);
    int cnt=foo.count();
无符号长整型b;
cin>>b;
bitsetfoo(b);
int cnt=foo.count();
注意,无符号long-long int将适合64位,根据


C++98中位集的构造函数允许无符号长。而C++11允许使用无符号long-long。也许是截断?你没有提到你使用的编译器,所以就这样…

你有可以重现这个问题的输入号码吗?这就是问题所在,我没有(这是没有问题的。所以这可能是语言/编译器的一个难以解释的有趣行为吗?除非你能显示出这个特定的代码块存在问题,否则没有什么可以解释的。BTW,你检查了编译器警告来验证上面的吗?我正在使用GNU C++ 4.3.2,但是这几乎回答了我的猜测,没有C++ 11。端口。你在构造函数中检查隐式转换的警告了吗?编译器没有给出任何警告。