二进制到十进制转换 - 公式?

时间:2012-03-16 18:40:05

标签: c# binary decimal

我已经搜索了一段时间并且还没有得到任何有用的东西,我正在使用子网计算器,而且我已经使用了我在这里找到的十进制到二进制,但是,我还没有找到将二进制转换为十进制的好方法。

注意:记住它的FROM二进制到十进制,无论如何,我需要公式或类似的东西(意思是计算它,而不是自动计算)。

通过阅读其他一些帖子,你可以通过除以10得到结果,我已经明白了,但我并不是真的理解它,所以如果有人能指出我正确的方向,我会很高兴

任何和所有帮助都非常感谢大家! :)

7 个答案:

答案 0 :(得分:14)

没有LINQ:

var s = "101011";    // my binary "number" as a string
var dec = 0;
for( int i=0; i<s.Length; i++ ) {
  // we start with the least significant digit, and work our way to the left
  if( s[s.Length-i-1] == '0' ) continue;
  dec += (int)Math.Pow( 2, i );
}

任何基数中的数字都可以被认为是其数字之和乘以其地方价值。例如,十进制数3906可以写为:

3*1000 + 9*100 + 0*10 + 6*1

地方价值只是10的权力:

3*10^3 + 9*10^2 + 0*10^1 + 6*10^0

(请记住,任何以0为幂的数字都是1.)

Binary的工作方式完全相同,除了base是2,而不是10.例如,二进制数101011可以写成:

1*2^5 + 0*2^4 + 1*2^3 + 0*2^2 + 1*2^1 + 1*2^0

我希望这能让您更好地理解二进制数以及如何转换它们。

实际上,最好的解决方案是Matt Grande's;总是更喜欢使用库方法而不是自己滚动(除非你有充分的理由这样做)。

答案 1 :(得分:12)

你可以这样做:

string bin = "10010101010101";
long l = Convert.ToInt64(bin,2);

答案 2 :(得分:3)

11010101 = 1 * 2 ^ 7 + 1 * 2 ^ 6 + 0 < / strong> * 2 ^ 5 + 1 * 2 ^ 4 + 0 * 2 ^ 3 + 1 * 2 ^ 2 + 0 * 2 ^ 1 + 1 < /强> * 2 ^ 0

................. = 128 + 64 + 0 + 16 + 0 + 4 + 0 + 1

答案 3 :(得分:3)

这很好用

using System;

class BinaryToDecimal
{
    static void Main()
    {
        double sum = 0;
        int n = 1111111; // binary number
        int strn = n.ToString().Length; //how many digits has my number
        for (int i = 0; i < strn; i++)
        {
            int lastDigit = n % 10; // get the last digit
            sum = sum + lastDigit * (Math.Pow(2, i));
            n = n / 10; //remove the last digit
        }
        Console.WriteLine(sum);
    }
}

答案 4 :(得分:1)

答案非常简单。我们假设你有x作为二进制数:

string x = "10010101010101";

因为我们知道要计算的通用公式是从右边开始2^index_1 + 2^index_2 + 2^index_n 我们可以使用LINQ做类似的事情(未经测试):

x.Reverse()
 .Select((element, i) => new { Index = i, Element = char.GetNumericValue(element) })
 .Where(a => a.Element != 0)
 .Aggregate(0.0, (a, b) => a + (Math.Pow(2, b.Index)));

答案 5 :(得分:0)

//a is an integer array which has binary value 
sum = 0;
Array.Reverse(a);
for (int j = 0; j < a.Length;j++)
{
   if (a[j] == 1)
sum = sum + (Math.Pow(2, j));
}

答案 6 :(得分:0)

这是我的..

private string binary2DecimalCal(string bin)
    {
        string res;
        char[] cArr = bin.ToCharArray();
        Array.Reverse(cArr); // Reverse binary string
        List<string> sArr = new List<string>();
        for (int i = bin.Length - 1; i > -1; i--) // Get the bits
            sArr.Add(cArr[i].ToString()+"x2^"+i.ToString()); // Calculation step for each bits
        res = String.Join(" + ", sArr.ToArray()); // Join the string with +
        return res;
    }