Program basit bir şekilde 2lik (binary) sayı sisteminde girilen değeri 10luk (decimal) sayı sistemine çeviriyor.
Peki 2lik sayı sisteminden bir sayı 10luğa nasıl dönüştürülür ?
Bildiğiniz gibi 2lik bir sayıyı 10luk sisteme çevirirken, ikilik sayının ilk değerini 2^0 ile çarpıyoruz. Daha sonraki değerini 2^1 ile çarpıyoruz ve bu işlemi 2lik sistemdeki sayının basamakları bitinceye kadar yapıp, çıkan sonuçları topluyoruz. Başlarken en sağ basamaktan başlıyoruz.
Örnek :
2lik sayı : 1010
10luk hali : 2^0*0=0 + 2^1*1=2 + 2^2*0=0 + 2^3*1=8
Sonuç = 0+2+0+8=10
Örneğimizin sonucu
Başka bir örnek :
2lik sayı : 11001
10luk hali : 2^4*1 + 2^3*1 + 2^2*0 + 2^1*0 + 2^0*1 = 25
Kaynak kodu :
Kod: Tümünü seç
#include <stdio.h>
int main()
{
int sayi = 0; // Kullanicinin girecegi ikilik sayi.
int basamakDegeri = 0; // O anki isleyecegimiz basamagin degerini burada tutacagiz.
int ikininKati = 1; // Bize gerekli olan 2nin kati sayiyi burada tutacagiz.
int toplam = 0; // Tum toplam burada duracak.
// Kullanicidan 2lik sayimizi aliyoruz
printf("2lik sayiyi girin \t : ");
scanf("%d", &sayi);
// Burada soyle bir mantik kullanalim. Bizim islemimiz su sekilde:
// toplam = basamak1*2^(1-1) + basamak2*2^(2-1) + basamak3*2^(3-1)...
// Yukaridan anlasilacagi uzere sag basamaktan baslayip sola dogru gidecegiz.
// Her dongude bana sunlar gerek; basamakDegeri, 2^(basamak-1)
while(sayi > 0)
{
// "sayi"nin en sag basamaginin degerini alip dongumuzde onu isleyelim
basamakDegeri = sayi % 10;
// Eger "basamakDegeri" 0 ve 1 degilse girilen sayida problem var demektir.
if (basamakDegeri != 0 && basamakDegeri != 1)
{
printf("Ikilik sayi sadece 0 ve 1'den olusur. Lutfen girilen sayiyi kontrol edin.\n");
return 1; // main()'den 1 ile donmek programin hata ile bittigi anlamina gelir.
}
// Sayinin bir sol basamagina atlamis olmak icin "sayi"nin en sag basamagini silecegiz.
// Or: 110/10=11. (int oldugu icin virgul iptal oluyor)
// Basamak kalmayinca da "sayi" 0 olacak ve son tur olacak.
sayi /= 10;
// "toplam"imiza yeni hesabimizi da ekliyoruz. 2^X*basamakDegeri islemi aslinda.
toplam += ikininKati * basamakDegeri;
// "ikininKati"ni 2 ile carpmaliyiz ki bir sonraki turda kullanacagiz.
ikininKati *= 2;
}
printf("10luk karsiligi \t : %d\n",toplam);
return 0;
}