首页 > 解决方案 > 将带符号的二进制转换为十进制、八进制和十六进制

问题描述

     public static void Dec(string[] args)
            {
                string b = "1000000000001010";
                string a = Convert.ToInt32(b, 2).ToString();
                Console.WriteLine(a);
            }

        string B2D(string b)
        {
            string a = Convert.ToInt32(b, 2).ToString();
            return a;
        }

        string B2H(string b)
        {
            string a = Convert.ToInt32(b, 2).ToString("X");
            return a;
        }

        string B2O(string b)
        {
            int a = Convert.ToInt32(b, 2);
            string c = Convert.ToString(a, 8);
        return c;
        }

我有一个带符号的二进制数,它是十进制形式的 -10,我希望输出字符串为 -10。我的输出变得随机,我找不到任何解决方案。

标签: c#

解决方案


我有一个带符号的二进制数,十进制形式为 -10

1000000000001010(2) 不是 -10(10) 开头的“1”表示负号,但是对于负数,您可以通过正数以外的方式创建它们。

https://en.wikipedia.org/wiki/Two%27s_complement https://www.geeksforgeeks.org/how-the-negative-numbers-are-stored-in-memory/

Alex Larionov 在评论中提到,-10(10) = 1111111111110110(-2) 并且需要转换为 Int16。是的,就像 16 位数字转换为 32 位数字一样,它变为正数: 00000000000000001111111111110110(2) = 65 526(10) (转换用零填充额外的 16 位,使数字不再是 16 位负数)

(二进制补全)二进制系统中的 32 位表示为 11111111111111111111111111110110

    public static void Main(string[] args)
    {
        string b = "11111111111111111111111111110110";
        Console.WriteLine(B2D(b));
        Console.WriteLine(B2H(b));
        Console.WriteLine(B2O(b));
    }

    static string B2D(string b)
    {
        string a = Convert.ToInt32(b, 2).ToString();
        return a;
    }

    static string B2H(string b)
    {
        string a = Convert.ToInt32(b, 2).ToString("X");
        return a;
    }

    static string B2O(string b)
    {
        int a = Convert.ToInt32(b, 2);
        string c = Convert.ToString(a, 8);
        return c;
    }
}

推荐阅读