2015-10-20 58 views
0

這是一種時髦的程序。由於某種原因,當二進制輸入類似於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(); 
    } 
} 

它的心臟是當然 如果(二進制[I] == 49)

我只是使得它教給自己一些C#。有人可以告訴我在49以外的右側放置什麼,這是「1」的ASCII碼。如果我把「1」我得到一個錯誤,說你不能比較字符串到字符。

任何幫助,將不勝感激。我不想使用預先轉換爲二進制方法,因爲這應該是一個可教的時刻。

+2

提示:嘗試'Math.Pow(2,binary.Length - i - 1)';) –

+0

字符文字用單引號括起來:''1''。 – user1620220

+0

如果您無法將字符串與字符進行比較,爲什麼不嘗試將字符串轉換爲另一個字符?你也可以嘗試解析(提示)字符串到一個整數,看看它是1還是0. –

回答

1

您從錯誤的一端讀取字符。

正如在這個問題第一個評論,盧卡斯Trzesniewski當即表示,與binary.Length - 1 - i替換一個使用i兩者)​​for循環中。

它爲"101"工作的原因是這是一個迴文(回讀相同)。

注意:49'1'的ASCII碼。使用== '1'== 49更易讀。但是,兩者同樣適用。在C#中,如果使用單引號,則會得到char值,如'1',如果使用雙引號"1",則會得到string對象引用。

您應該刪除與"xxx"的東西。它沒有功能。只要做string binary = Console.ReadLine();

+1

謝謝。我真的不知道字符串中的零字符是最左邊的字符。現在我明白了。 – user3832863

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(); 
    } 
} 
+1

只是FYI:你也可以使用'long'而不是'double',在這種情況下你可以編寫[* fancy *'<< ='operator](https://msdn.microsoft.com/en- us/library/ayt2kcfb.aspx):'decimalValue << = 1;'而不是'decimalValue * = 2;':-) –