二进制到十进制转换不起作用

时间:2015-10-20 18:50:22

标签: c# binary

这是一个时髦的节目。出于某种原因,当二进制输入类似于101时它起作用。然后它不适用于1000.这有点奇怪。有人可以解释一下吗?

class Program
{
    static void Main()
    {         
            string binary = "xxx";
            double decimalValue = 0;

            Console.WriteLine("Enter in a binary number:");
            binary = Console.ReadLine();

            for (int i = 0; i < binary.Length; i++)
            {
                Console.WriteLine("Length is: {0}", binary.Length);

                if (binary[i] == 49)  //Look at that
                    decimalValue = decimalValue + Math.Pow(2, i);
            }

            Console.WriteLine("The decimal equivalent value is {0}", decimalValue);

            Console.ReadLine();
    }
}

它的核心当然是     if(binary [i] == 49)

我只是在教自己一些C#。有人可以告诉我除了49之外的右边放什么,这是“1”的ASCII数字。如果我输入“1”,则会收到错误消息,指出您无法将字符串与字符进行比较。

任何帮助将不胜感激。我不想使用预先转换为二进制方法,因为这应该是一个可教的时刻。

2 个答案:

答案 0 :(得分:1)

你从错误的一端读取字符。

正如Lucas Trzesniewski在问题的第一条评论中所说,在i循环中用{for替换{{1>}( not 两者)的一次使用1}}。

它适用于binary.Length - 1 - i的原因是这是一个回文(向后读的相同)。

注意:"101"49的ASCII代码。使用'1'== '1'更具可读性。但是,两者都同样有效。在C#中,如果使用单引号,则会获得== 49值,如char中所示,如果使用双引号'1',则会获得string对象引用。

您应该使用"1"删除这些内容。它没有任何功能。只需"xxx"

答案 1 :(得分:1)

不是试图根据它的位置添加每个位的值,而是采取另一种方法:移位和添加。在这种方法中,您将当前值向左移动(通过将该值乘以2)并添加当前位。

例如:二进制值1010在四个周期内变为十进制10:

value = 0
value *= 2 => value = 0
value += bit 1 => value = 1
value *= 2 => value = 2
value += bit 0 => value = 2
value *= 2 => value = 4
value += bit 1 => value = 5
value *= 2 => value = 10
value += bit 0 => value = 10

或者,在代码中:

using System;

public class Program
{
    public static void Main()
    {
        string binary = "";
        double decimalValue = 0;

        Console.WriteLine("Enter in a binary number:");
        binary = Console.ReadLine();

        for (int i = 0; i < binary.Length; i++)
        {
            decimalValue *=2; // shift current value to the left
            if (binary[i] == 49)
            {
                decimalValue += 1; // add current bit
            }   
            Console.WriteLine("Current value: {0}", decimalValue);
        }
        Console.WriteLine("The decimal equivalent value is {0}", decimalValue);
        Console.ReadLine();
    }
}