二进制到十进制转换-公式
本文关键字:公式 转换 十进制 二进制 | 更新日期: 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;
}