11
Haz
2020

C++ ile binary (ikili) sayıyı decimal (onlu) sayıya dönüştüren program

Decimal sayı sistemi, günlük hayatta kullandığımız sayı sistemidir ve 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 rakamlarının kombinasyonları ile sayılar oluşturur. Elektronik cihazlar Boolean cebri ile çalışır. Boolean cebri, İngiliz matematikçi George Boole’ un 1847 yılında yazdığı ilk kitabı «TheMathematical Analysis of Logic» ile tanıtılmıştır. Matematiksel mantıkta Boolean cebrinde bir değişkenin alabileceği iki değer vardır ve bu değerler «doğru» veya «yanlış» ifade edilir. Günümüz elektronik sistemlerinin sayısal modelini oluşturmamızı sağlayan Boolean cebri; 1 ve 0 rakamlarını kullanır. Örneğin bir lamba yanıyorsa 1, yanmıyorsa 0 ile, bir kapasitör şarj olmuşsa 1, olmamışsa 0 ile, bir anahtar açıksa 1, kapalıysa 0 ile ifade edilir. 1 ve 0 sayılarından türetilen sayılara binary sayılar denir. Her binary sayı hafızada 1 bit yer kaplar. Örneğin 8 bit 10100011 binary sayısının analizi ve decimal karşılığına dönüştürme işlemi aşağıdaki gibi yapılabilir.
10100011 ikili sayısının decimal karşılığı aşağıdaki şekilde hesaplanabilir:
= (1×27) + (0x26) + (1×25) + (0x24) + (0x23) + (0x22) + (1×21) + (1×20)
= 128 + 32 + 2 + 1
= 163
Aşağıdaki C++ kodu ile kullanıcının girdiği string tipinde binary verinin (BinaryDizi) decimal karşılığı hesaplanmaktadır. BinaryDizi en fazla 64 bit olmalıdır. Çünkü dönüşümden sonra elde edilen sayı long integer tipinde bir değişkene aktarılmaktadır ve long integer hafızada 8 bayt (64 bit) yer kaplamaktadır. 8 bayt bellek alanında tutulabilecek sayı aralığı 0 ile 4,294,967,295 arasındadır. kontrol() fonksiyonu ile hem BinaryDizi‘ nin 8 bayttan büyük olup olmadığı hem de içinde 0 ve 1 dışında karakter olup olmadığı kontrol edilmektedir. Eğer girilen dizide 0 ve 1 dışında karakter yoksa ve 64 bitten büyük değilse donustur() fonksiyonu ile BinaryDizi decimal karşılığına dönüştürülür.
/* Binary den Decimal' e dönüşüm www.hbmacit.com*/
#include<iostream>
#include<cmath>
using namespace std;

string BinaryDizi;  // Kullanıcı tarafından girilen binary sayı

bool Kontrol()  // Girilen sayıda hata varsa FALSE döndüren fonksiyon
{
  if (BinaryDizi.length() > 64)
  {
    cout<<"Girdiğiniz sayı 8 bayttan büyük olduğu için dönüştürülemiyor."<<endl;
    return false; // Binary sayı 64 karakterden (8 bayt) uzun. Hatalı giriş!
  }
  for (int i=0;i<BinaryDizi.length();i++)
  {
    if((BinaryDizi.compare(i,1,"0") !=0 ) && (BinaryDizi.compare(i,1,"1") != 0))
    {
      cout<<"Girdiğiniz sayı binary olmayan karakter veya karakterler içeriyor."<<endl;
      return false; // Binary sayıda 0 ve 1 dışında karakter var. Hatalı giriş!
    }
  }
  return true;  // Binary sayı doğru girilmiş
}

unsigned long Donustur() // Binary sayıyı decimal' e dönüştüren fonksiyon
{
  unsigned long sonuc = 0;
  for (int i=BinaryDizi.length();i>0;i--)
  {
    sonuc = sonuc + ((BinaryDizi[i-1]-48)*pow(2,BinaryDizi.length()-i));
  }
  return sonuc;
}

int main()
{
  cout<<"Binary sayıyı giriniz:";
  cin>>BinaryDizi;
  if (Kontrol()==true)
  {
    cout<<"Sayının decimal karşılığı: "<<Donustur()<<endl;
  }
}

Program çalıştığında, örneğin 10100011 binary sayısı girildiğinde aşağıdaki şekilde sonuç gösterilmektedir.

Kullanıcı hatalı bir giriş yaptığında aşağıdaki gibi sonuç gösterilmektedir.