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
알고있다.
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
알고있다.
알고리즘은 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)
그냥 내 두 센트 (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();
}
훨씬 더 효율적입니다 (Librik/Szudzik/Schr ö ppel에 의한)하는 방법이있다 :
uint64_t negabinary(int64_t num) {
const uint64_t mask = 0xAAAAAAAAAAAAAAAA;
return (mask + num)^mask;
}
변환 방법과 그 반대는 this answer에 자세히 설명되어 있습니다.
http://en.wikipedia.org/wiki/Negative_base#Calculation을 보셨습니까? – kennytm