二进制到十进制转换不起作用
本文关键字:不起作用 转换 十进制 二进制 | 更新日期: 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();
}
}