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

本文关键字:公式 转换 十进制 二进制 | 更新日期: 2023-09-27 18:28:08

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

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

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

非常感谢各位的帮助!:)

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

在没有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

(记住,任何取零次方的数字都是1。)

二进制的工作方式完全相同,只是基数是2,而不是10。例如,二进制数101011可以写成:

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

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

从实际情况来看,最好的解决方案是马特·格兰德的;最好使用库方法,而不是滚动自己的方法(除非你有充分的理由这样做)。

你可以这样做:

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

11010101=1*2^7+1*2^6+0*2^5++strong>1*2^40*2^3+1*2^2+0 1+1*2^0

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

这很好

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);
    }
}

答案非常简单。假设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)));
//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));
}

这是我的。。

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;
    }