Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.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
C++ 二进制表示_C++ - Fatal编程技术网

C++ 二进制表示

C++ 二进制表示,c++,C++,例如,sum(6)必须返回2,因为6的二进制版本是110 不确定逻辑是否正确 int sum(int n) { int count = 0; while(n) { count += n & 1; n >>= 1; } return count; } int main(){ int n = 9001; cout << “The sum of bits for

例如,sum(6)必须返回2,因为6的二进制版本是110

不确定逻辑是否正确

int sum(int n)
{
    int count = 0;
    while(n)
    {
        count += n & 1;
        n >>= 1;
    }
    return count;
}
int main(){
    int n   =   9001;
    cout << “The    sum of  bits    for number  “   <<  n   <<  “is”    <<  sum(n)  <<  endl;
    retun   0;
}
int和(int n)
{
整数计数=0;
while(n)
{
计数+=n&1;
n>>=1;
}
返回计数;
}
int main(){
int n=9001;

cout如果您使用GCC作为编译器,请签出内置的
\uuuuBuiltin\uPopCount()
。它以二进制表示返回1的数目

有关更多信息,请参阅


编辑2:我这里有一个不正确的解决方案,已将其删除。感谢评论指出了这一点。

一如既往,解决这些问题的最佳方法是使用标准库。你们都研究了标准库中可用的工具,对吗

;-)


速度很快,因为它每1位只循环一次。

您遇到的问题是什么?除非您正在寻找一个可以复制和粘贴的完整答案,否则我在这里看不到任何问题。您想问的是什么?在输入负数之前,您的代码是正常的……然后它将永远不会停止。我想知道它是否丑陋解决方案与否。如果是,那么我想确保我能写出一个好的解决方案。如果你知道体系结构没有内在地计算位的指令,这是一个非常好的解决方案(有些是这样的)
std::bitset
解决方案允许实现使用这些指令,因此应该至少同样快,如果不是更快的话-假设您使用的是实现良好的库。+1用于尼斯算法。
#include <iostream>
#include <bitset>


template<class T>
size_t bits_in(T t)
{
    return std::bitset<sizeof(t) * 8>(t).count();
}

int main()
{
    using namespace std;
    int i = 6;

    cout << "bits in " << i << " : " << bits_in(i) << endl;

    long l = 6353737;
    cout << "bits in " << l << " : " << bits_in(l) << endl;

    return 0;
}
bits in 6 : 2
bits in 6353737 : 11
int sum(int n)
{
  int count = 0;
  if (0 != n)
  {
    while(++count, n &= (n - 1));
  }
  return count;
}