Temel C Programlama -13- C Veri ve Değişken Tipleri – 2
Last updated
Was this helpful?
Last updated
Was this helpful?
Önceki başlıkta veri tipleri olarak sadece temel tamsayı değişkenleri anlatsak da yazı bayağı uzadı ve yorucu oldu. Şimdi ise daha kalan kısmını bu başlıkta anlatacağız. Basit tamsayı dışındaki değişkenleri tamsayı değişkenlerini anlamaktan daha zor olacağını hesap edebiliriz. Burada en sık kullandığımış değişken tipi kullanacağımız kayan noktalı (ondalıklı) sayı değeri olsa da öncelikle tam sayıları bitirmek adına sabit genişlikli tam sayı tiplerini sizlere aktaralım.
Sabit genişlikli tam sayıları anlamak için öncelikle temel tamsayı değişkenlerini incelememiz gereklidir. Biz bu değişkenleri anlatırken bunların değer aralığının kullanılan derleyiciye ve platforma göre değişiklik gösterdiğini söylemiştik. Yani bir platformda program yazarken int değişkeni -32768 ve 32,767 arasında değer alırken bir platformda bu değer aralığı -2 147 483 648 ve 2 147 483 647 arasında olabilir. Bu durumda birinde yazdığımız program çalışırken ötekinde sürprizlerle karşılaşabiliriz. C dilinde de C99 standartından itibaren stdint.h adında bir kütüphane dosyasında tamsayı değişkenlerinin genişliklikleri belirlenmiş ve programcının kullanımına sunulmuştur. Biz bilgisayarda pek kullanmasak da gömülü sistemlerde bu değerleri öncelikli olarak kullanırız.
Gömülü C konusunda geldiğimizde bütün ayrıntısıyla inceleyecek olsak da şimdilik bu değişken tiplerinden en çok kullanılanları sizlere aktaralım.
Değişken Adı
Açıklama
int8_t
-127 ve +127 arası işaretli değer alan 8-bit tam sayı
int16_t
-32 768 ve 32 767 arası işaretli değer alan 16-bit tam sayı
int32_t
-2 147 483 648 ve 2 147 483 647 arası değer alan 32-bit işaretli tam sayı
int64_t
−9 223 372 036 854 775 807 ve +9 223 372 036 854 775 807 arası değer alan 64-bit işaretli tam sayı
uint8_t
0-255 arası değer alan 8-bit işaretsiz tam sayı
uint16_t
0-65535 arası değer alan 16-bit işaretsiz tam sayı
uint32_t
0 – 4,294,967,295 arası değer alan 32-bit işaretsiz tam sayı
uint64_t
0 ve +18 446 744 073 709 551 615 arası değer alan 64-bit işaretsiz tam sayı
Bu tablodan başka kütüphane dosyası içerisinde tip tanımlamaları ve makrolar yer alsa da bunlar gömülü C derslerinde işimize yarayacağı için o bu kadarıyla yetiniyoruz. Anladığınıza emin olmak için bu değişken tiplerini örnekler üzerinde gösterelim.
123
int8_t karakter;uint8_t _bayt = 200;uint64_t = cok_uzun_sayi = 999999999999;
Okunabilirliği düşük olup temel tamsayı değişkenlerinden gözümüze yabancı görünse de alt seviye programcılığa alıştığınız zaman int, char, long gibi tabirleri kullanmayı unutursunuz.
Veri tipleri konusunda en son olarak ondalıklı sayı değişkeni olan float, double ve long double değişken tiplerinden bahsedeceğiz. Örneğin PI sayısını kullanarak bir hesaplama yapacağız fakat pi sayısını kaydetmemiz gereken bir değişken gerekiyor. Üstelik PI sayısını sabit olarak kullansak da (3.1415F gibi) bu sefer de PI sayısını kullanarak yaptığımız işlemin sonucu virgüllü olarak çıkmaktadır. Bu durumda bu değerleri tam sayı olan int, long, char gibi değişkenlere aktarmamız mümkün olmaz. Değerler aktarılsa dahi yuvarlatılarak bize verilir. Örneğin sonuç 3.6 çıkarsa bu 4 değeri olarak gösterilir. 3.4 çıkarsa bu 3 değeri olarak gösterilir. Bu elde edilen sonuç üzerinden bir işlem daha yapılırsa hesaplama çok yanlış elde edilir. O yüzden ondalıklı değer elde edilmesi muhtemel yerde float, double ve long double değişken tiplerini kullanmak gereklidir.
Sadece ondalıklı değer elde edeceğiniz değil elde edilme imkanı olan yerde de bunu kullanmakla önceden önlemi almak gereklidir. Şimdi bu değişkenlere bakalım.
Değişken Tipi
Açıklama
Format
float
IEEE 754 tek hassasiyette ikilik kayan noktalı formatında 32 bitlik kayan noktalı değişken. 1.2E-38 ve 3.4E+38 arasında virgülden sonra 6 haneye kadar rakam tutabilir.
%f dijital, %g bilimsel
double
64-bitlik kayan noktalı değişken. 2.3E-308 ve 1.7E+308 arası değer alabilir ve virgülden sonra 15 haneye kadar ondalıklı sayı destekler.
%lf
long double
10 baytlık ve 3.4E-4932 ve 1.1E+4932 arasında değer alabilen ondalık sayı değişkeni. Virgülden sonra 19 haneye kadar değer alabilir.
%Lf
Şimdi bir uygulama yapalım ve iki ondalıklı sayıyı birbiriyle çarpalım. Hem girişte ve hem çıkışta ondalıklı değer elde edeceğiz.
Burada double tipinde üç değişken tanımlayarak programa başlıyoruz. Bu üç değişkenin de double olması çok önemlidir. Örneğin iki tam sayıyı bölüp ondalıklı sayı elde edeceksek sadece sonuç değişkenini double olarak tanımlamamız yeterli olurdu. Fakat burada “.” işareti ile değişkenlere ondalıklı değer atayacağız ve bunların çarpımını yine ondalıklı değer olarak kaydedeceğiz. Konsola ondalıklı sabit değerleri yazmak için 20.15, 3.1415 gibi nokta işaretini kullanmamız gereklidir. Matematikte virgül kullanılsa da burada nokta kullanılmaktadır. Bu nokta kullanılma durumu aslında ülkelere göre değişmektedir. Orada matematikte de virgülden sonrası değil noktadan sonrası kavramı vardır.
scanf(“%lf %lf”, &ilk_sayi, &ikinci_sayi);
Bu komutta scanf fonksiyonunun daha önceden görmediğimiz bir kullanımını görüyoruz. Tek bir scanf fonksiyonu iki farklı değer alıp iki farklı değişkene değer ataması yapıyor. Bunları yaparken sırasını gözetmek ve format işaretini “%” koymak lazımdır. Burada format yukarıda belirttiğimiz üzere %lf şeklindedir. Bu formatları doğru yazmamız değişken tanımlamak kadar önemlidir.
sonuc = ilk_sayi * ikinci_sayi;
Bu çarpma işlemi aynı tamsayılarda olduğu gibi olsa da program bizim double şeklinde tanımladığımız değerleri bildiği için ondalık sayı çarpımı şeklinde işlemi yapmaktadır.
printf(“Sonuc = %.2lf \n”, sonuc);
Burada format kısmında %.2lf ifadesini kullanıyoruz. Yani virgülden sonra iki basamağı göstermesini fonksiyona söylüyoruz. Konsol ekranında da bu şekilde görmekteyiz.
Buraya kadar veri tipleri hakkında anlatmamız gereken başka bir konu kalmadı. Daha ilerisi için inttypes.h dosyasındaki tanımları ve makroları incelemenizi tavsiye ederiz. Biz daha ileri seviye konularda bundan bahsedeceğimiz için temel seviye olarak bu anlattıklarımız bile ileri seviye kalmakta.