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

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

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

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

任何和所有的帮助是非常感谢的家伙! 🙂

没有LINQ就做了:

var s = "101011"; // my binary "number" as a string var dec = 0; for( int i=0; i 

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

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

地方价值只是十的权力:

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

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

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

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

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

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

你可以这样做:

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

11010101 = 1 * 2 ^ 7 + 1 * 2 ^ 6 + 0 * 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

这很好用

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