تبدیل اعداد دسیمال به باینری
نکته : این پست مکملی برای پست عملگرهای بیتی می باشد.
اعداد باینری در دنیای کامپیوتر معمولا به صورت گروه های هشت رقمی یا بیتی هستند. برای تبدیل اعداد دسیمال به باینری ابتدا باید هشت فضای خالی برای قرار دادن این هشت رقم ایجاد کنید. فرض کنید می خواهیم عدد 54 را به معادل باینری آن تبدیل کنیم:
برای این کار یک سری عملیات ساده تکراری لازم است. اعداد باینری مبنای 2 هستند، بنابراین از عدد 2 به عنوان مبنا استفاده کرده و توان آن را از صفر به صورت زیر شروع می کنیم:
سپس اعداد 2 را به توان رسانده و معادل آن را به صورت زیر می نویسیم :
به اعداد بالا توجه کنید. هر عدد دو برابر عدد قبل از خودش است. حال کارمان را شروع می کنیم. در بین اعداد بالا، بزرگترین عددی، که از عدد مورد نظر ما، بزرگتر نباشد، را پیدا می کنیم. در بین اعداد بالا عدد 32 از عدد 54 که عدد مورد نظر ماست بزرگتر نیست. بر روی این عدد یک عدد 1 به صورت زیر قرار می دهیم.
حال عدد 32 را از عدد 54 کم می کنیم (22=32-54). در این قسمت عدد 22 عدد مورد نظر ما می شود. در بین اعداد بالا بزرگترین عددی که از عدد 22 بزرگتر نباشد را پیدا کرده و عدد 1 را بالای آن می نویسیم.
سپس عدد 16 را از عدد 22 کم می کنیم (6=16-22) که باقیماند آن عدد 6 است که بزرگترین عدد در بین اعداد بالا که از 6 بزرگتر نباشد عدد 4 است. عدد 1 را بالای عدد 4 قرار می دهیم.
و در نهایت عدد (2=4-6) 2 عدد موردنظر ما می شود که تنها عدد بزرگ در بین اعداد بالا که از عدد 2 بزرگتر نباشد همان عدد دو است. در بالای آن نیز عدد 1 قرار می دهیم.
کار ما به پایان رسید و فضاهای خالی را با عدد صفر پر می کنیم.
عدد به دست آمده 00110110 معادل باینری عدد 54 است. به این نکته توجه کنید که اعداد بزرگتر به بیت های بیشتری برای تبدیل نیاز دارند. برای اضافه کردن بیت جدید کافیست که بزرگترین عدد را دو برابر کنید و در بیت جدید بنویسید. مثلا برای عدد 312 کافیست که عدد 128 را دو برابر کنید و در بیت جدید به صورت زیر بنویسید :
حال اگر بخواهید، مراحل بالا را با استفاده از کدنویسی انجام دهید، باید به صورت زیر عمل کنید :
using System; namespace DecimalToBinary { class Program { static void Main(string[] args) { int number; Console.Write("Enter a Number : "); number = int.Parse(Console.ReadLine()); int quotient; string remainder = ""; while (number >= 1) { quotient = number / 2; remainder += (number % 2).ToString(); number = quotient; } string binary = ""; for (int i = remainder.Length - 1; i >= 0; i--) { binary = binary + remainder[i]; } Console.WriteLine("The Binary format for given number is {0}", binary); Console.Read(); } } }
Enter a Number : 54 The Binary format for given number is 110110
بنظرتون این کد بهتر نیست؟
تازه از فرمولی که برای بدست آوردن باینری(توان عدد دو) توضیح دادین استفاده میکند
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace GetBinary
{
class Program
{
static void Main(string[] args)
{
double num = double.Parse(Console.ReadLine());
double power = Math.Floor(Math.Log(num, 2)); ;
string bin = string.Empty;
for (int i = (int)power; i >= 0; i–)
{
double x = Math.Pow(2, i);
if (x <= num)
{
num -= x;
bin += "1";
}
else
{
bin += "0";
}
}
Console.WriteLine(s);
Console.ReadKey();
}
}
}