首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将十进制基(10)转换为负二进制基(-2)?

如何将十进制基(10)转换为负二进制基(-2)?
EN

Stack Overflow用户
提问于 2012-02-17 23:28:12
回答 4查看 12K关注 0票数 11

我想写一个程序把十进制数转换成负二进制数。

我想不出如何把十进制转换成负二进制。

我不知道如何找到规则以及它是如何工作的。

示例:7(base10)-->11011(base-2)

我只知道是7 = (-2)^0*1 + (-2)^1*1 + (-2)^2*0 + (-2)^3*1 + (-2)^4*1

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-02-18 01:17:02

该算法在http://en.wikipedia.org/wiki/Negative_base#Calculation中描述。基本上,您只需选择余数作为正的基本情况,并确保余数是非负的和最小的。

代码语言:javascript
复制
 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)
票数 12
EN

Stack Overflow用户

发布于 2016-01-12 07:01:05

以下是我的两点看法(C#):

代码语言:javascript
复制
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();
}
票数 3
EN

Stack Overflow用户

发布于 2019-06-02 23:52:49

代码语言:javascript
复制
def neg2dec(arr):
    n = 0
    for i, num in enumerate(arr[::-1]):
        n+= ((-2)**i)*num
    return n

def dec2neg(num):
    if num == 0:
        digits = ['0']
    else:
        digits = []
        while num != 0:
            num, remainder = divmod(num, -2)
            if remainder < 0:
                num, remainder = num + 1, remainder + 2
            digits.append(str(remainder))
    return ''.join(digits[::-1])
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9330946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档