2011-11-29 69 views
2

在不使用除法算法的情况下,C++中是否有将十进制数转换为二进制数的函数? 我想计算2个数字的二进制格式的不同位。像diff(0,2)是1位。或diff(3,15)是2位。 我想写diff功能。 谢谢二进制比较

+2

你是什么意思*“convert”*?任何数字*已经*为二进制格式,您将显示与实际存储方式混淆在一起。但请记住;如果您要对浮点数执行按位运算,则需要知道它们的存储方式。 –

+0

数字以二进制格式存储,不需要转换。顺便说一句,你正在寻找http://en.wikipedia.org/wiki/Hamming_distance。 –

+0

我知道,但这是任何方式来显示二进制格式的数字,而不用除法算法 –

回答

2

您可以通过计算两个数字的xor中的位来找到不同位的数量。 就是这样。

int count_bits(unsigned int n) { 
    int result = 0; 
    while(n) { 
     result += 1; 
     // Remove the lowest bit. 
     n &= n - 1; 
    } 
    return result; 
} 

int diff(unsigned int a, unsigned int b) { 
    return count_bits(a^b); 
} 
+0

你能解释这是如何工作的?我无法理解count_bits(a^b)如何运行? –

+0

我感觉这是家庭作业 - 您可能想更多地解释:p –

+0

@Ava这是XOR。我解释了我的答案意味着什么。 – littleadv

0

您可以在序号使用XOR(如果Z = X XOR y时,其被不同地设置在X和Y将被设置为在Z 1,所设置的相同的X的每个比特的每个比特和Y将被设置为0),并使用简单的循环和移位来计算结果的位数。

0

从技术上讲,所有东西都已经是二元的。您只需要开始查看按位运算符来访问组成您正在查看的十进制数的各个位。

例如,

if (15 & 1) would check to see if 15 has its first bit turned on. 
if (15 & 3) would check to see if its first 2 bits were turned on. 
if (15 & 4) would check to see if its 3rd bit only was turned on. 

你可以用和/或/ XOR /等做到这一点。谷歌按位运算符并阅读。