2011-11-29 3 views
2

나누기 알고리즘을 사용하지 않고 10 진수를 2 진수로 변환하는 함수가 있습니까? 두 숫자의 이진 형식의 다른 비트를 계산하려고합니다. like diff (0,2)는 1 비트입니다. 또는 diff (3,15)는 2 비트입니다. diff 함수를 작성하고 싶습니다. 감사합니다.이진 비교

+2

* "변환"* 무엇을 의미합니까? 어떤 숫자도 이진 형식의 * 이미 *입니다. 실제 저장 방법과 디스플레이가 혼란 스럽습니다. 그래도 기억해. 부동 소수점 숫자에 대해 비트 단위 연산을 수행하려는 경우 부동 소수점 숫자가 저장되는 방식을 알아야합니다. –

+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

모든 것이 이미 기술적으로 2 진수입니다. 보고있는 10 진수를 구성하는 개별 비트에 액세스하려면 비트 연산자를 살펴 보는 것부터 시작하면됩니다. 예를 들어

,

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/등으로이 작업을 수행 할 수 있습니다. 구글 비트 연산자와 읽기.