2012-02-17 2 views
8

10 진수에서 음수로 변환하는 프로그램을 작성하고 싶습니다.10 진수 기본 (10)을 negabinary base (-2)로 변환하는 방법은 무엇입니까?

십진수에서 음수로 변환하는 방법을 알 수 없습니다.

규칙을 찾는 방법과 작동 원리에 대해 잘 모릅니다.

예 : 7(base10)-->11011(base-2)

나는 그냥 7 = (-2)^0*1 + (-2)^1*1 + (-2)^2*0 + (-2)^3*1 + (-2)^4*1 알고있다.

+7

http://en.wikipedia.org/wiki/Negative_base#Calculation을 보셨습니까? – kennytm

답변

9

알고리즘은 http://en.wikipedia.org/wiki/Negative_base#Calculation에 설명되어 있습니다. 기본적으로 나머지는 양수 기본 케이스로 선택하고 나머지는 음수가 아니며 최소값인지 확인해야합니다.

7 = -3*-2 + 1 (least significant digit) 
-3 = 2*-2 + 1 
2 = -1*-2 + 0 
-1 = 1*-2 + 1 
1 = 0*-2 + 1 (most significant digit) 
3

그냥 내 두 센트 (C 번호) :

public static int[] negaBynary(int value) 
{ 
    List<int> result = new List<int>(); 

    while (value != 0) 
    { 
     int remainder = value % -2; 
     value = value/-2; 

     if (remainder < 0) 
     { 
      remainder += 2; 
      value += 1; 
     } 

     Console.WriteLine (remainder); 
     result.Add(remainder); 
    } 

    return result.ToArray(); 
} 
1

훨씬 더 효율적입니다 (Librik/Szudzik/Schr ö ppel에 의한)하는 방법이있다 :

uint64_t negabinary(int64_t num) { 
    const uint64_t mask = 0xAAAAAAAAAAAAAAAA; 
    return (mask + num)^mask; 
} 

변환 방법과 그 반대는 this answer에 자세히 설명되어 있습니다.

관련 문제