错误:无效的操作数到二进制转换(位集<;8>;和int) 如何在C++中迭代二进制数?

错误:无效的操作数到二进制转换(位集<;8>;和int) 如何在C++中迭代二进制数?,c++,C++,在前面提到的函数中,我得到 无效的操作数到二进制转换(位集和int) 这是我的代码中的函数,它获取声明的错误 int value(int x) { int temp=0,counter=0; bitset<8> i(x); while (i != 0) { temp = i % 10; if(temp == 1) { counter++; } i = i/10; } retu

在前面提到的函数中,我得到

无效的操作数到二进制转换(位集和int)

这是我的代码中的函数,它获取声明的错误

int value(int x)
{
    int temp=0,counter=0;
    bitset<8> i(x);
    while (i != 0) {
       temp = i % 10;
       if(temp == 1) {
           counter++;
       }
       i = i/10;
  }
  return counter;
}
int值(int x)
{
内部温度=0,计数器=0;
位集i(x);
而(i!=0){
温度=1%10;
如果(温度==1){
计数器++;
}
i=i/10;
}
返回计数器;
}

要计算x的前8位中的1个数:

int value(int x)
{
  return bitset<8>(x).count();
}
int值(int x)
{
返回位集(x.count();
}
要计算所有位,请执行以下操作:

int value(int x)
{
  return bitset<sizeof(x) * CHAR_BIT>(x).count();
}
int值(int x)
{
返回位集(x.count();
}
如果您必须使用循环解决方案:(使用可用功能适应您的解决方案)

int值(int x)
{
int计数器=0;
位集i(x);
而(i!=0){
如果(i[0]==1){
计数器++;
}
i>>=1;
}
返回计数器;
}

X是我需要的二进制值的数字,然后从该二进制数中我应该找到该数字所具有的1的数字。您实际上没有使用位集。您的代码正在尝试迭代十进制而非二进制的数字。如果您想计算位,您可以。请看@WhozCraig:
sizeof(x)
给出x中的字符数,而不是位数。@Jarod42:只要转换没有溢出,就没有特定于实现的内容。你是对的,这更好,但在回答中我更喜欢使用OP的签名。嘿@Dani,我在我的程序中实现了你的代码,唯一的问题是所有二进制数中有1的数字,比如2,8,我得到的答案是垃圾值,比如143434。@SanjayJain:我测试了所有的变体,它们都工作正常。你能展示你的全部代码吗?是的,丹尼在这里#包括#包括使用名称空间标准;int值(int i);int main(){int t;cin>>t;而(t!=0){int n=0;cin>>n;int i=-1;int arr[n];for(int i=0;i>arr[i];}for(int j=0;j
int value(int x)
{
    int counter=0;
    bitset<8> i(x);
    while (i != 0) {
       if(i[0] == 1) {
           counter++;
       }
       i >>= 1;
  }
  return counter;
}