2016-09-24 201 views
-2

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

在提到的功能我得到

invalid operands to binary conversion (bitset<8> and 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; 
} 
+0

X是它的二进制值,我需要的数量,然后从二进制数我应该找到那个号码的号码。 –

+1

你真的没有在这里使用bitset。你的代码试图迭代十进制而不是二进制数。 – iksemyonov

+1

如果你想计数位,你有['bitset :: count()'](http://en.cppreference.com/w/cpp/utility/bitset/count)。 –

回答

3

要计算前8 1点的数量x的位:

int value(int x) 
{ 
    return bitset<8>(x).count(); 
} 

要计算所有的位:

int value(int x) 
{ 
    return bitset<sizeof(x) * CHAR_BIT>(x).count(); 
} 

如果你必须使用一个循环的解决方案:(适应于可用功能解决方案)

int value(int x) 
{ 
    int counter=0; 
    bitset<8> i(x); 
    while (i != 0) { 
     if(i[0] == 1) { 
      counter++; 
     } 
     i >>= 1; 
    } 
    return counter; 
} 
+0

@ Jarod42:只要转换没有溢出,就没有任何特定的实现。你是对的,这样更好,但在答案上我更愿意坚持OP的签名。 – Dani

+0

嘿@Dani,我在我的程序中实现了你的代码,唯一的问题是所有的数字都是1的二进制数字,比如2,8我得到的答案是垃圾值,比如14343434. –

+0

@SanjayJain:I测试了所有的变体,他们都工作。你能展示你的整个代码吗? – Dani

相关问题