Рассмотрим преобразование целого положительного двоичного числа в десятичную систему счисления.
Для преобразования числа из двоичной системы в десятичную используется таблица:
Значение | 2048 | 1024 | 512 | 256 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
Степень двойки | 211 | 210 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 |
Рассмотрим пример преобразования числа 101112. Для перевода в десятичное запишите его как сумму по разрядам следующим образом:
1101112 => 1 * 25 + 1 * 24 + 0 * 23 + 1 * 22 + 1 * 21 + 1 * 20 = 32 + 16 + 4 + 2 + 1 = 55
1101112 = 5510
Программа для перевода двоичного числа в десятичную систему счисления
using System;
using System.Text;
class Program
{
static uint BinaryToDecimal(string binaryNumber)
{
var exponent = 0;
var result = 0u;
for (var i = binaryNumber.Length - 1; i >= 0; i--)
{
if (binaryNumber[i] == '1')
{
result += Convert.ToUInt32(Math.Pow(2, exponent));
}
exponent++;
}
return result;
}
static void Main(string[] args)
{
Console.OutputEncoding = Encoding.UTF8;
Console.Write("Введите число в двоичной системе: ");
var binNum = Console.ReadLine();
var decNum = BinaryToDecimal(binNum);
Console.WriteLine("{0} => {1}", binNum, decNum);
Console.ReadLine();
}
}
Метод BinaryToDecimal можно оптимизировать, заменив возведение в степень на умножение:
static uint BinaryToDecimal(string binaryNumber)
{
var exp = 1u;
var result = 0u;
for (var i = binaryNumber.Length - 1; i >= 0; i--)
{
if (binaryNumber[i] == '1')
{
result += exp;
}
exp *= 2;
}
return result;
}