0

我目前在尝试让我的程序将二进制数转换为正确的十进制等值时遇到了很大的困难。有了我所拥有的,它给了我正确的数量,比如 111=7,但是当它应该是 13 时,它给了我错误的数量,比如 1101 = 11。

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {

            int num;
            //int n;



            Console.WriteLine("Enter a number");
             num = Convert.ToInt16(Console.ReadLine());

            //n = num;

            bintonum(num);
        }


        public static void bintonum (int num)
        {
            int dig;
            double sum = 0;


                while (num > 0)
                {

                dig = num % 10; //takes the number and breaks it down into each digit
                sum = dig + (sum * 2); //reverses the number and adds the digit aquired from the previous line
                num = num / 10; // reduces the number by one digit to get to zero

                }

                Console.WriteLine("{0}", sum);

        }     
    }
}
4

3 回答 3

2

此功能由 .NET 框架提供:

Convert.ToInt32(num, 2)

这里,num是字符串,2是表示字符串的基数。

更多细节在这里

于 2013-10-17T20:23:31.997 回答
1

如果你需要从base 2(二进制)到base 10(十进制),你可以使用这种方法:
111 2 = 1 *2^2 + 1 *2^1 + 1 *2^0
...... = 4 + 2 + 1 = 7 10

1101 2 = 1 *2^3 + 1 *2^2 + 0 *2^1 + 1 *2^0
........ = 8 + 4 + 0 + 1 = 13 10

基本前提是二进制系统有两位数,并且二进制数中的每个占位符都可以乘以 2 的幂得到其十进制等价物。十进制数中的位数也是如此:
121 10 = 1 *10^2 + 2 *10^1 + 1 *10^0
......... = 100 + 20 + 1 = 121 10

2543 10 = 2 *10^3 + 5 *10^2 + 4 *10^1 + 3 *10^0
......... = 2000 + 500 + 40 + 3 = 2543 10

此外,您可以将此方法用于任何以 10 为底(十进制)的基数。十六进制如下所示:
0 = 0, 1 = 1, 2 = 2, 3 = 3, 4 = 4, 5 = 5, 6 = 6, 7 = 7, 8 = 8,
9 = 9, A = 10, B = 11,C = 12,D = 13,E = 14,F = 15

1A3C 16 = 1 *16^3 + 10 *16^2 + 3 *16^1 + 12 *16^0
.... = 4096 + 2560 + 48 + 12 = 6716 10

这是一个八进制示例:
八进制数字系统的范围为 0-7,通常用于表示由三个二进制数组成的组。
722 8 = 7 *8^2 + 2 *8^1 + 2 *8^0
........ = 448 + 16 + 2 = 466 10

于 2013-10-17T20:29:20.597 回答
0

当您检查正确的“位”(或第 0 位)时,您需要另一个循环,请检查:

        int num = 1101;
        int sum = 0;
        int n2 = 1;
        while (num > 0)
        {

            int dig = num % 10;
            sum = dig*n2 + sum;
            num = num / 10;
            n2 = n2 * 2;

        }
于 2013-10-17T20:29:33.557 回答