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

本文关键字:不起作用 转换 十进制 二进制 | 更新日期: 2023-09-27 18:18:37

这是一个

时髦的程序。 出于某种原因,当二进制输入为 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 (二进制[i] == 49(

我只是为了自学一些 C#。 有人可以告诉我除了 49 之外的右侧应该放什么,这是"1"的 ASCII 数字。 如果我输入"1",我会收到一个错误,说您无法将字符串与字符进行比较。

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

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

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

正如卢卡斯·特热斯涅夫斯基(Lucas Trzesniewski(在对该问题的第一条评论中立即所说,将for循环中i的一种使用(不是两个(替换为binary.Length - 1 - i

它适用于"101"的原因是这是一个回文(向后阅读相同(。

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

你应该用"xxx"删除这些东西。它没有功能。只要做string binary = Console.ReadLine();.

与其尝试根据每个位的位置添加每个位的值,不如采用另一种方法:shift 和 add。在此方法中,您将当前值向左移动(将该值乘以 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();
    }
}