tamsayı veri türleri (integer types)
C dilinin toplam 4 ayrı tamsayı veri türü vardır ancak her birinin kendi içinde isaretli ve isaretsiz biçimi
olduğundan, toplam tamsayı türü 8 kabul edilir.
Đsaretli (signed) tamsayı türlerinde pozitif ve negatif tam sayı değerleri tutulabilirken, isaretsiz (unsigned) veri
türlerinde negatif tamsayı değerleri tutulamaz.
Bu türleri sırasıyla inceleyelim:
isaretli ve isaretsiz char veri türü :
Süphesiz char sözcüğü ingilizce character sözcüğünden kısaltılmıstır ve türkçe “karakter” anlamına
gelmektedir. Ancak bu türün ismini, bundan sonraki derste C dilinin bir anahtar sözcüğü olduğunu
öğreneceğimiz char sözcüğü ile özdeslestirip, “char türü” (çar diye okuyunuz) diye söyleyeceğiz. Đsaretli
char türünden bir nesnenin bir byte’lık bir alanda tutulması C standartlarınca garanti altına alınmıstır.
1 byte’lık bir alanı isaretli olarak kullandığımızda yazabileceğimiz değerlerin -128 / 127 değerleri arasında
değisebileceğini sayı sistemleri dersimizden hatırlayalım.
isaretsiz char veri türünün isaretli olandan farkı 1 byte’lık alanın isaretsiz olarak, yani yalnızca 0 ve pozitif
sayıların ifadesi için kullanılmasıdır. Bu durumda isaretsiz char türünde 0 – 255 arasındaki tamsayı değerleri
tutulabilir.
isaretli ve isaretsiz short int veri türü (isaretli kısa tamsayı türü – isaretsiz kısa tamsayı türü) :
Yine bundan sonraki derste öğreneceğimiz gibi, short ve int sözcükleri C dilinin anahtar sözcüklerinden
olduğu için bu türün ismini genellikle short int, ya da kısaca short türü olarak telaffuz edeceğiz.
isaretli ve isaretsiz short veri türünden bir nesne tanımlandığı zaman, nesnenin bellekte kaç byte yer
kaplayacağı sistemden sisteme değisebilir. Sistemlerin çoğunda, short int veri türünden yaratılan nesne
bellekte 2 byte’lık bir alan kaplayacaktır. isaretli short int veri türünden bir nesne -32768 – +32767
aralığındaki tamsayı değerlerini tutabilirken, isaretsiz short türü söz konusu olduğıundan tutulabilecek
değerler 0 – +65535 aralığında olabilir.
isaretli int (signed int) türü ve isaretsiz int (unsigned int) türü :
isaretli ve isaretsiz int veri türünden bir nesne tanımlandığı zaman, nesnenin bellekte kaç byte yer
kaplayacağı sistemden sisteme değisebilir. Çoğunlukla 16 bitlik sistemlerde, int veri , 32 bitlik sistemlerde ise
int veri türü 4 byte yer kaplamaktadır.
16 bitlik sistem, 32 bitlik sistem ne anlama geliyor.
16 bitlik sistem demekle islemcinin yazmaç (register) uzunluğunun 16 bit oldugunu anlatıyoruz.
int veri türünün 2 byte uzunluğunda olduğu sistemlerde bu veri türünün sayı sınırları, isaretli int türü için –
32768 – +32767, isaretsiz int veri türü için 0 – +65535 arasında olacaktır.
isaretli ve isaretsiz long int veri türü (isaretli uzun tamsayı türü – isaretsiz
uzun tamsayı türü)
Bu türün ismini genellikle long int, ya da kısaca long türü olarak telaffuz edeceğiz.
isaretli ve isaretsiz long int veri türünden biriyle tanımlanan bir nesnenin bellekte kaç byte yer kaplayacağı
sistemden sisteme değisebilir. Sistemlerin çoğunda, long int veri türünden yaratılan nesne bellekte 4 byte’lık
bir alan kaplayacaktır. Đsaretli long int veri türünden bir nesne -2147483648 – +2147483647 aralığındaki
tamsayı değerlerini tutabilirken, isaretsiz long int türü söz konusu olduğıundan tutulabilecek değerler 0 –
+4.294.967.296 aralığında olur.
GERÇEK SAYI TÜRLERİ
C dilinde gerçek sayı değerlerini tutabilmek için 3 ayrı veri türü tanımlanmıstır. Bunlar sırasıyla, float, double
ve long double veri türleridir. Gerçek sayı veri türlerinin hepsi isaretlidir. Yani gerçek sayı veri türleri içinde
hem pozitif hem de negatif değerler tutulabilir. Gerçek sayıların bellekte tutulması sistemden sisteme
değisebilen özellikler içerebilir. Ancak sistemlerin çoğunda IEEE 754 sayılı standarda uyukmaktadır.
Sistemlerin hemen hemen hepsinde float veri türünden bir nesne tanımlandığı zaman bellekte 4 byte yer
kaplayacaktır. 4 byte’lık yani 32 bitlik alana özel bir kodlama yapılarak gerçek sayı değeri tutulur. IEEE 754
sayılı standartta 4 byte’lık gerçek sayı formatı “single precision ” (tek hassasiyet) olarak isimlendirilmistir.
Bu standartta 32 bitlik alan 3 bölüme ayrılmıstır.
1 bitlik alan (sign bit): gerçek sayının isaret bilgisini yani pzoitif mi negatif mi olduğu bilgisini tutar.
8 bitlik alan (exponential part) :
23 bitlik alan (fraction part) : sayının ondalık kısmını tutar.
Sistemlerin hemen hemen hepsinde double veri türünden bir nesne tanımlandığı zaman bellekte 8 byte yer
kaplayacaktır. Gerçek sayıların bellekte tutulması sistemden sisteme değisebilen özellikler içerebilir. Ancak
sistemlerin çoğunda IEEE 754 sayılı standarda uyulmaktadır.
long double veri türünden bir nesne tanımlandığı zaman bellekte 10 byte yer kaplayacaktır.
char türü 1 byte uzunluğunda olmak zorundadır.
short veri türünün uzunluğu int türünün uzunluğuna esit ya da int türü uzunluğundan küçük olmalıdır. Yani
short <= int
long veri türünün uzunluğu int türüne esit ya da int türünden büyük olmak zorundadır. Yani
long >= int
Derleyiciler genel olarak derlemeyi yapacakları sistemin özelliklerine göre int türünün uzunluğunu islemcinin
bir kelimesi kadar alırlar. 16 bitlik bir islemci için yazılan tipik bir uygulamada
char türü 1 byte
int türü 2 byte (islemcinin bir kelimesi kadar)
short türü 2 byte (short = int)
long türü 4 byte (long > int)
alınabilir.
Yine 32 bitlik bir islemci için yazılan tipik bir uygulamada
char türü 1 byte
int türü 4 byte (islemcinin bir kelimesi kadar)
short türü 2 byte (short < int)
long türü 4 byte (long = int)
alınabilir.
C dilinin en çok kullanılan veri türleri tamsaylar için int türü iken gerçek sayılar için double veri türüdür. Peki
hangi durumlarda hangi veri türünü kullanmak gerekir. Bu sorunun cevabı olarak hazır bir reçete vermek pek
mümkün değil, zira kullanacağımız bir nesne için tür seçerken bir çok faktör söz konusu olabilir, ama genel
olarak su bilgileri verebiliriz :
Gerçek sayılarla yapılan islemler tam sayılarla yapılan islemlere göre çok daha fazla yavastır. Bunun nedeni
süphesiz gerçek sayıların özel bir sekilde belirli bir byte alanına kodlanmasıdır. Tamsayıların kullanılmasının
yeterli olduğu durumlarda bir gerçek sayı türünün kullanılması , çalısan programın hızının belirli ölçüde
yavaslatılması anlamına gelecektir. Bir tamsayı türünün yeterli olması durumunda gerçek sayı türünün
kullanılması programın okunabilirliğininin de azalmasına neden olacaktır.