Daha önce bahsettiğimiz üzere C ve C++ farklı diller olmasına rağmen bu konu altında iki dili bir bütün olarak düşünüp veri türlerini inceleyeceğiz. Veri denilince akla ilk gelen kavram değişkenlerdir. Biz programlamada bir değişken tanımlayıp değişken içerisine değerler atayarak kullanırız. Programlama ile biraz ilgili olan herkes tam sayılar için integer, ondalıklı sayılar için float, alfabetik karakterler için ise char türü değişkenlerin kullanıldığını bilir. Programlamada başlangıç seviyesinde biraz ileriye doğru gittiğimizde verilerin sadece int, char gibi değişkenlerde saklanmadığını, bir çok farklı türün kullanıldığını görürüz. Bu nedenle tüm türleri ifade etmek için değişken kavramı yetersiz kalır ve veri türü ifadesini kullanırız. GeeksfoGeeks sitesinde rastladığım aşağıdaki tabloyu veri türlerini anlama konusunda oldukça faydalı buluyorum.
Tabloyu incelemeye geçmeden önce; programlama sırasında bir veri tipi tanımladığımız zaman aslında derleyiciye bu veri tipi için bellekte ne kadar yer ayırması gerektiğini bildirmiş oluruz. Tüm veri türleri bellekte 1 ve 0 'dan oluşan ikili sayılar (bit) şeklinde saklanır. İkili sayılara aşina değilseniz
buraya göz atabilirsiniz. Biz programın ihtiyacına göre kullanacağımız veri tipini belirler ve kullanırız. Tüm veri tiplerinin bir kapasitesi vardır ve bellekte farklı boyutta yer işgal ederler.
1. Temel (Primary) Veri Tipleri
Bu türler dil içerisinde ön tanımlı olarak yer alır ve programcı tarafından doğrudan kullanılabilirler.
Integer : Tamsayıları saklamak için kullanılır.
Character : Alfabetik karakterler ve sembolleri saklamak için kullanılır.
Boolean : Var-Yok, Açık-Kapalı, Doğru-Yanlış gibi mantıksal durumları saklamak için kullanılır.
Floating Point : Ondalıklı sayıları saklamak için kullanılır.
Double Floating Point : Ondalıklı sayıları saklamak için kullanılır. Saklama kapasitesi daha fazladır.
Void : Herhangi bir değer saklamaz. Fonksiyonların adreslemesinde kullanılır.
Wide Character : Yine Alfabetik karakterleri ve semboller için kullanılır ancak Character türüne göre kapasitesi daha fazladır.
2. Türetilmiş Veri Tipleri
Temel veri tipleri vasıtası ile oluşturulan veri tipleridir.
Function : Fonksiyonlar veriler ile işlem yapar ve bu nedenle hafızada yer kaplarlar.
Array : Bir veri tipi dizisi oluşturmakta kullanılır.
Pointer : Bir veri tipinin bellek adresini saklar.
Referance : Bir veri tipi için referans teşkil eder.
3. Kullanıcı Tanımlı Veri Tipleri
Bu türlerin yapısı kullanıcı tarafından belirlenir.
Enum : Numaralandırma işlemi yapar.
Typedef : Tür Tanımlaması yapar.
Structure : Veri türlerinden oluşan yeni yapı tanımlar.
Union : Veri türlerinden oluşan yeni yapı tanımlar. Hafıza kullanımı yönünden struct tan farklıdır.
Class : Veri türleri ve dahili fonksiyonlara sahip sınıf yapısıdır.
Şu ana kadar tüm veri türlerinden özet olacak şekilde bahsettik. Elbette bu özet bilgi veri türlerini anlamak için kesinlikle yetersizdir. Temel olarak bilinmesi gereken dört tip vardır. Bunlar; Tamsayılar, Ondalıklı Sayılar, Mantıksal durumlar ve Karakterlerdir. Diğer tüm türler bu 4 tip veri türü üzerine inşa edilmiştir.
Veri türü değiştiricileri (modifiers)
Temel veri türlerinin ön tanımlı ve kullanıma hazır olduğundan bahsetmiştik. Bu türlerin kapasitesi bellidir. Ancak bazı temel veri türlerinin kapasitesi veri türü değiştiriciler ile değiştirilebilir.
Signed : Sadece int ve char türü ile birlikte +/- işaretli sayılar için kullanılır. Negatif sayıların önünde - işareti bulunduğu için işaretli olarak adlandırılır
Unsigned : Int ve char türü ile birlikte sadece pozitif sayılar için kullanılır. Normalde pozitif sayıların önünde + işareti bulunmadığı için işaretsiz olarak adlandırılır.
Long : Int ve double türleri için kullanılır. Türün kapasitesini arttırır.
Short : Sadee int türü için kullanılır. Türün kapasitesini azaltır.
Tür değiştiriciler kombine şekilde de kullanılabilirler. Temel veri türlerinin kapasitelerini ve tür değiştiriciler ile bu durumun nasıl değiştiğini anlamak için aşağıdaki tabloyu incelemek faydalı olacaktır. Ayrıca bu tablo temel veri türleri için referans niteliğindedir.
Veri Tipi |
Kapasitesi (byte) |
Kapasite (bit) |
Aldığı Farklı Değer Sayısı |
Alt Sınır |
Üst Sınır |
Integer |
4 |
32 |
4.294.967.296 |
-2.147.483.648 |
2.147.483.647 |
Unsigned Int |
4 |
32 |
4.294.967.296 |
0 |
4.294.967.295 |
Short Int |
2 |
16 |
65.536 |
-32.768 |
32.767 |
Long Int |
4 |
32 |
4.294.967.296 |
-2.147.483.648 |
2.147.483.647 |
Unsigned Short Int |
2 |
16 |
65.536 |
0 |
65.535 |
Unsigned Long Int |
4 |
32 |
4.294.967.296 |
0 |
4.294.967.295 |
Long Long Int |
8 |
64 |
2^64 |
-(2^63) |
(2^63)-1 |
Unsigned Long Long Int |
8 |
64 |
2^64 |
0 |
(2^64)-1 |
Char |
1 |
8 |
256 |
-128 |
127 |
Signed Char |
1 |
8 |
256 |
-128 |
127 |
Unsigned Char |
1 |
8 |
256 |
0 |
255 |
Float |
4 |
32 |
|
1.17549e-038 |
3.40282e+038 |
Double |
8 |
64 |
|
2.22507e-308 |
1.79769e+308 |
Long Double |
12 |
96 |
|
3.3621e-4932 |
1.18973e+4932 |
Wchar_t |
2 veya 4 |
16 veya 32 |
|
|
|
Not : Tablodaki değerler (özellikle integer türü için) kullanılan derleyiciye veya işletim sistemine veya işlemci bit kapasitesine göre değişiklik gösterebilir. Yukarıdaki tablo gcc 32bit derleyicisi için referans değerlerdir. Kullanılan sistemde kullanılan veri türünün kapasitesini kesin olarak tespit etmek için Sizeof() fonksiyonundan yararlanılabilir.