2.1 Veri Tipleri
2.1 Veri Tipleri
Veri tipi (data type) program içinde kullanılacak değişken, sabit, fonksiyon isimleri gibi tanımlayıcıların tipini, yani bellekte ayrılacak bölgenin büyüklüğünü, belirlemek için kullanılır. Bir programcı, bir programlama dilinde ilk olarak öğrenmesi gereken, o dile ait veri tipleridir. Çünkü bu, programcının kullanacağı değişkenlerin ve sabitlerin sınırlarını belirler. C programlama dilinde dört tane temel veri tipi bulunmaktadır. Bunlar:
1 2 3 4 |
char int float double |
Fakat bazı özel niteleyiciler vardır ki bunlar yukarıdaki temel tiplerin önüne gelerek onların türevlerini oluşturur. Bunlar:
1 2 3 |
short long unsigned |
Bu niteleyiciler sayesinde değişkenin bellekte kaplayacağı alan isteğe göre değiştirilebilir. Kısa (short), uzun (long), ve normal (int) tamsayı arasında yalnızca uzunluk farkı vardır. Eğer normal tamsayı 32 bit (4 bayt) ise uzun tamsayı 64 bit (8 bayt) uzunluğunda ve kısa tamsayı 16 biti (2 bayt) geçmeyecek uzunluktadır. İşaretsiz (unsigned) ön eki kullanıldığı taktirde, veri tipi ile saklanacak değerin sıfır ve sıfırdan büyük olması sağlanır. İşaretli ve işaretsiz verilerin bellekteki uzunlukları aynıdır. Fakat, işaretsiz tipindeki verilerin üst limiti, işaretlinin iki katıdır.
NOT
|
Bir C programı içerisinde, veri tiplerinin bellekte kapladığı alan sizeof operatörü ile öğrenilebilir. İlgi cekici olan, bu alanların derleyiciye ve işletim sistemine bağlı olarak değişiklik göstermesidir. Program 2.1’de, sizeof operatörü kullanılarak, veri tiplerinin bellek uzunlularının nasıl ekrana yazdırılacağı gösterilmiştir. Programın çıktısı, farklı derleyiciler ve işletim sisteminde denendiğinde bu durum daha iyi anlaşılır. Lütfen inceleyin.
Program 2.1: Değişken tipleri ve türevlerinin bellekte kapladıkları alanlar
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
/* 02prg01.c : sizeof operatörünün kullanımı */ #include <stdio.h> main() { printf( "char : %d bayt\n", sizeof(char)); printf( "short : %d bayt\n", sizeof(short)); printf( "int : %d bayt\n", sizeof(int)); printf( "long : %d bayt\n", sizeof(long)); printf( "unsigned char : %d bayt\n", sizeof(unsigned char)); printf( "unsigned short : %d bayt\n", sizeof(unsigned short)); printf( "unsigned int : %d bayt\n", sizeof(unsigned int)); printf( "unsigned long : %d bayt\n", sizeof(unsigned long)); printf( "float : %d bayt\n", sizeof(float)); printf( "double : %d bayt\n", sizeof(double)); printf( "long double : %d bayt\n", sizeof(long double)); } |
ÇIKTI
Windows (32 bit) Turbo C | Windows (32 bit) Salford | Linux (32 bit) GCC | Linux (64 bit) GCC | ||||||||
|
|
|
|
ÇIKTI
int veritipi ve türevleri ile hesaplanabilecek en küçük ve en büyük tamsayılar için aşağıdaki formül kullanılabilir:
Alt sınır = -28*sizeof(tip)
Üst sınır = 28*sizeof(tip)-1
Örneğin 4 baytlık bir int tipi için:
Alt sınır = -28*sizeof(int) = -232 = -2147483648
Üst sınır = 28*sizeof(int)-1 = 232-1 = 2147483647
Tablo 2.1’de bütün tipler, bellekte kapladıkları alanlar ve hesaplanabilcek (bellekte doğru olarak saklanabilecek) en büyük ve en küçük sayılar listelenmiştir.
Tablo 2.1: Değişken tipleri ve bellekte kapladıkları alanlar
Veri Tipi | Açıklama | Bellekte işgal ettiği boyut (bayt) | Alt sınır | Üst sınır |
char | Tek bir karakter veya küçük tamsayı için |
1 | -128 | 127 |
unsigned char | 0 | 255 | ||
short int | Kısa tamsayı için | 2 | -32,768 | 32,767 |
unsigned short int | 0 | 65,535 | ||
int | Tamsayı için | 4 | -2,147,483,648 | 2,147,483,647 |
unsigned int | 0 | 4,294,967,295 | ||
long int | Uzun tamsayı için | 8 | -9,223,372,036,854,775,808 | 9,223,372,036,854,775,807 |
unsigned long int | 0 | 18,446,744,073,709,551,615 | ||
float | Tek duyarlı gerçel sayı için (7 basamak) | 4 | -3.4e +/- 38 | +3.4e +/- 38 |
double | Çift duyarlı gerçel sayı için (15 basamak) | 8 | -1.7e +/- 308 | +1.7e +/- 308 |