Розглянемо перетворення цілого додатного двійкового числа в десяткову систему числення.
Для перетворення числа з двійкової системи в дисяткову використовується таблиця:
Значення | 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;
}