这是一个时髦的节目。出于某种原因,当二进制输入类似于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”,则会收到错误消息,指出您无法将字符串与字符进行比较。
任何帮助将不胜感激。我不想使用预先转换为二进制方法,因为这应该是一个可教的时刻。
答案 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();
}
}