Yazan : Şadi Evren ŞEKER
Bilgisayar bilimlerinde hemen hemen bütün programlama dillerinde bulunan en basit veri tipidir. Programlama sırasında tutulan basit tam sayıları işlemek için kullanılır. Normal bir tam sayı değişkeni 16 bitliktir (ikil) ve 16 ikil ile (bit) tutulabilecek olan-32767 ile +32767 sayıları arasında tanımlı olan değerleri tutabilir.
32 bitlik işletim sistemleri ve derleyicilerin (compiler) kullanılmasıyla birlikte tam sayı tanımı da 32 bite çıkabilmektedir. Bu durumda bir tam sayı değişkenine -2147483648 ile + 2147483647 sayıları arasındaki değerler konulabilmektedir.
Dev-Cpp geliştirme ortamının kullandığı mingw32 derleyicisi de bu aralığı desteklemektedir. Örneğin aşağıdaki kodu ele alalım:
Yukarıdaki kod sağlıklı bir şekilde derlenip çalıştırılabilir. Örnek çıktı aşağıdadır:
Yukarıdaki kodda, konulan tam sayı değişkenini 1 arttırırsak ve derleyicimizin desteklediği alanın dışına çıkarırsak:
Bu durumda kodu çalıştırdığımızda aşağıdaki çıktıyı alırız:
Görüldüğü üzere sayı değeri eksiye dönmüştür. Bunun sebebi integer tipinin desteklediği alanın dışına çıkıldığında eksi değerden devam etmesidir. Yani bir integer değeri sürekli arttıran bir kod yazacak olursak bu kod desteklenen azami değere gelip ardından eksi değerlere dönüp tekrar artmaya başlar. Bunu bir daire gibi düşünmek mümkündür.
Aslında işin biraz daha temeline inersek 32 bit uzunluğunda bir bilgi tutulduğunu kabul edebiliriz. Bu bilginin kodlandığı dizilim aşağıdaki şekildedir:
0 | 1 | 1 | ……. | 1 |
Yön biti | 31. bit | 30.bit | 0 ile 30 arasındaki bitler | 0.bit |
Yukarıdaki gösterimden anlaşılacağı üzere yönlü bir tamsayının en baştaki biti yön için (eksi veya artı) olarak atanmaktadır. Bu değer eksi sayılarda 1 ve artı sayılarda 0 olmaktadır. Pozitif bir tam sayının aldığı azami değer için yön biti dışındaki değerler 1 olarak atandığına göre bu değeri 1 arttırdığımızda elde ettiğimiz değer veri için ayrılan bitlere sığmamaktadır. Bu durumda veri için ayrılan bitler sığabilecek en yüksek değeri alırken yön biti değişmektedir.
Kodumuzda ufak bir değişiklik yaparak durumu daha iyi anlamaya çalışalım:
Yukarıdaki kodda, a değişkeninin içerisine 232-1 değeri konulmuştur. Çalıştırıldığında ekrana -1 sonucu çıkmaktadır.
Programlama dillerinde veri tipinin hep artı değerler alması durumu için unsigned terimi bulunur. Bu terim verinin hiçbir zaman- değer alamayacağını dolayısıyla yön biti olarak ayrılan bite ihtiyaç olmadığını belirtir. 32 bitlik değişkenimiz için artık 32 bit birden veri için kullanılabilir. Bu durumda değişkenin içerisine 0 ile 232 = 4294967296 arasındaki sayılar yerleştirilebilir.
Bu durumu aşağıdaki kod ile göstermeye çalışalım:
Yukarıdaki kodun çıktısı aşağıdaki şekildedir:
Görüldüğü üzere yönlü tam sayılara göre (signed integer) iki misli yüksek sayılara çıkabilen bu değişken eksi sayı tutamaz.
Ayrıca yukarıdaki kodda 6. Satırda bulunan printf içerisindeki %d ibaresinin %u olarak değişmesine dikkat ediniz. Bastırdığınız değer unsigned olunca burada %u kullanmanız gerekir.
Programlama dilinde daha büyük verileri tutmak için ayrıca double ve long tipleri bulunur. Bütün bu tipleri aşağıdaki kod ile anlamamız mümkün olur:
Yukarıdaki kodda, limits.h kütüphanesi eklenmiş ve dolayısıyla INT_MIN gibi int tipinin en küçük değerini veren sabitler kodda kullanılabilmiştir. Kodun çalışan hali aşağıdaki şekildedir:
Yukarıdaki gösterimde son iki satırda yer alan e+038 benzeri gösterimler exponential (üssel) gösterimlerdir ve 10 üzeri olarak düşünülmelidir. Örneğin 3.402823e+038 ifadesi = 3.402823 * 1038 Olarak düşünülmelidir.