【问题标题】:trouble converting binary into its decimal equivalent in c#在 c# 中将二进制转换为十进制等值的问题
【发布时间】:2013-10-17 20:18:16
【问题描述】:

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

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);

        }     
    }
}

【问题讨论】:

  • 这是一个不允许你使用内置功能的学校项目吗?
  • 需要自己写转换算法吗?正如@zimdanen 在下面回答的那样,此功能内置于 .NET 框架中。
  • 如果您可以使用 zimdanen 的答案,那就太好了!如果您需要公式,请尝试查看this SO question and answers
  • 你的代码倒转,1011 = 11。
  • 好的,所以很接近,当时只是倒退了

标签: c# binary decimal console-application


【解决方案1】:

此功能由 .NET 框架提供:

Convert.ToInt32(num, 2)

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

更多详情here.

【讨论】:

    【解决方案2】:

    如果您需要从以 2 为底(二进制)到以 10 为底(十进制),您可以使用这种方法:
    1112 = 1*2^2 + 1*2^1 + 1*2^0
    ...... = 4 + 2 + 1 = 710

    11012 = 1*2^3 + 1*2^2 + 0*2^ 1 + 1*2^0
    ........ = 8 + 4 + 0 + 1 = 1310

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

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

    此外,您可以对任何以 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

    1A3C16 = 1*16^3 + 10*16^2 + 3*16^ 1 + 12*16^0
    ...... = 4096 + 2560 + 48 + 12 = 671610

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

    【讨论】:

      【解决方案3】:

      当您检查正确的“位”(或第 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;
      
              }
      

      【讨论】:

        猜你喜欢
        • 2020-06-04
        • 2012-12-26
        • 2017-07-15
        • 1970-01-01
        • 2019-03-24
        • 2019-04-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多