2011-11-29 106 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 /等做到這一點。谷歌按位運算符並閱讀。