C programlama dilinde tanımlanan her veri kendi içerisinde belirli bir türe aittir. Boyutları ve kullanılma amaçlarına göre bu türler belirli sınıflara ayrılmıştır. Bu türlerin bellekte kapladığı alanlar byte cinsinden ifade edilir.
1 byte = 8 bit
Tamsayı, ondalıklı sayı, karakter veri türleri başta olmak üzere bu veri türlerinin türevleri C programlama dilindeki veri türlerini oluşturmaktadır. Bu veri türleri bellekte kapladıkları alanlar ve anlamları ile aşağıda sırasıyla tablolarda mevcuttur.
int Türü (integer: tamsayı)
int veri türü 1, 2, 35, -45, 0, 72 gibi tamsayı sayıların ifade edilmesinde kullanılır. Önüne getirilecek sayının büyüklüğüne göre integer veri türleri de mevcuttur.
Anahtar Kelime | Veri Türü | Boyut | Minimum | Maximum | Biçim |
---|---|---|---|---|---|
int signed signed int | İşaretli tamsayı | 4 byte | −2.147.483.648 | +2.147.483.647 | %i veya %d |
unsigned unsigned int | İşaretsiz tamsayı | 4 byte | 0 | 4.294.967.295 | %u |
short short int signed short signed short int | İşaretli kısa tamsayı | 2 byte | -32.768 | 32.767 | %hi |
unsigned short unsigned short int | İşaretsiz kısa tamsayı | 2 byte | 0 | 65.535 | %hu |
long long int signed long signed long int | İşaretli uzun tamsayı | 4 byte | −2.147.483.648 | +2.147.483.647 | %li |
unsigned long unsigned long int | İşaretsiz uzun tamsayı | 4 byte | 0 | 4.294.967.295 | %lu |
long long long long int signed long long signed long long int | İşaretli çok uzun tamsayı | 8 byte | -9.223.372.036.854.775.808 | 9.223.372.036.854.775.807 | %lli |
unsigned long long unsigned long long int | İşaretsiz çok uzun tamsayı | 8 byte | 0 | 1.844.744.073.709.551.615 | %llu |
C programlama dilinde kullanılan tamsayı veri türlerinin işaret ve boyuta göre sınıflandırılması yukarıdaki tabloda verilmiştir. Her ne kadar uzun bir tablo olsa dahi uygulama esnasında integer bir veri türü tanımlanırken “hangi sembol ile tanımlamalıyım?” diye düşünülmemektedir.
float Türü (float: ondalıklı sayı)
float veri türünde tanımlanan 14.53 gibi veriler ondalıklı sayılardır ve bu durum yazılan program tarafından da bilinir. Önüne getirilecek sayının büyüklüğüne göre float veri türleri de mevcuttur.
Anahtar Kelime | Veri Türü | Duyarlılık | Boyut | Minimum | Maksimum | Biçim |
---|---|---|---|---|---|---|
float | Ondalıklı sayı | 6 basamak | 4 byte | 1.175494351 E – 38 | 3.402823466 E + 38 | %f |
double | Uzun ondalıklı sayı | 15 basamak | 8 byte | 2.2250738585072014 E – 308 | 1.7976931348623158 E + 308 | %lf |
long double | Çok uzun ondalıklı sayı | – | 12 byte | %Lf |
C programlama dilinde kullanılan ondalıklı sayı veri türlerinin boyuta göre sınıflandırılması yukarıdaki tabloda verilmiştir. Yukarıdaki 3 veri türü sembolü ile tanımlanan veriler program tarafından ondalıklı sayı olarak algılanmaktadır.
char Türü (character: karakter)
char veri türünde tanımlanan “a”, “i”, “r”, “b” gibi veriler karakter olarak ifade edilir. Bu durum yazılan program tarafından da bilinir. Aşağıdaki tabloda char veri türünün örnekleri mevcuttur.
Anahtar Kelime | Veri Türü | Boyut | Minimum | Maksimum | Biçim |
---|---|---|---|---|---|
char | Karakter | 1 byte | derleyiciye bağlı | derleyiciye bağlı | %c |
signed char | İşaretli karakter | 1 byte | -128 | 127 | %c, %hhi |
unsigned char | İşaretsiz karakter | 1 byte | 0 | 255 | %c, %hhu |
C programlama dilinde kullanılan karakter veri türlerinin boyuta göre sınıflandırılması yukarıdaki tabloda verilmiştir. Yukarıdaki 3 karakter veri türü sembolü de 1 byte boyutundadır.
%hhi ve %hhu char veri türü ifade biçimleri sadece sayısal çıktının olduğu durumlarda kullanılır.
void Türü
void veri türü önüne getirilecek olan verinin bir kimliği olmaması istendiğinde kullanılır. Yani verinin veri türü olmaması istenildiğinde kullanılır. Genellikle değer döndürmeyen fonksiyonların tanımlanmasında kullanılır.
#include<stdio.h>
void fonksiyon(){
//fonksiyon kodları buraya yazılır.
}
Yukarıdaki örnek kodda void anahtar kelimesi ile tanımlanmış bir fonksiyon mevcuttur. Bu fonksiyon tanımlanırken bir değer döndürmediği için void anahtar kelimesi ile tanımlanma gereksinimi duyulmuştur.
sizeof() Fonksiyonu
C programlama dili kullanılarak programda oluşturulmuş tüm veri türlerinin bellekte ne kadar yer kapladı sizeof() fonskiyonu ile hesaplanabilmektedir. Bu fonksiyonun döndürdüğü değer içerisindeki parametrenin veri türünün bellekteki kapladığı yerdir.
#include<stdio.h>
int main(){
int sayi;
printf("int veri turunun bellekte kapladigi alan --> %d byte",sizeof(sayi));
return 0;
}
Çıktı:
int veri turunun bellekte kapladigi alan --> 4 byte
Yukarıda sizeof() fonskiyonunun kullanıldığı bir örnek verilmiştir. Bu kod ile integer veri türünde tanımlanan bir değişkenin programın derlendiği makinenin belleğinde ne kadar alan kapladığı basit bir kod satırı ile konsol ekranına bastırılmıştır.
Sabit Genişlikli Tamsayı Türleri
Veri türleri tanımlanırken aldıkları boyutlar hemen hemen belirli bir değerdedir. Lakin bazı makinelerin sistemlerinin farklılıkları nedeniyle veri türlerinin boyutları farklılık gösterebilir. Örnek vermek gerekirse Microsoft firmasının Windows yazılımı 32 bit sürümünden 64 bit sürümüne geçerken zorluk olmaması amacıyla iki versiyon arasındaki bit konfigürasyonlarını değiştirmemiştir. Bu durumda 64 bitlik sistem üzerinde 32 bitlik sistem gibi kodlanmaya imkan tanınmıştır.
Bit ve byte arasındaki ilişkinin sürekli sabit olmaması nedeniye sabit bit değerine sahip veri türlerinin doğmasına sebep oluşmuştur. Sabit genişlikli veri türleri sayesinde tanımlamış olduğumuz veri türü hangi sistemde çalıştırılırsa çalıştırılsın tanımlandığı an belitirlen bit değerine sahip olacaktır. Sabit genişlikli veri türleri aşağıdaki tabloda detayları ile mevcuttur.
Anahtar Kelime | Veri Türü | Minimum Değer | Maksimum Değer |
---|---|---|---|
intn_t | İşaretli sabit n bitli tamsayı | n bit (min) | n bit (max) |
uintn_t | İşaretsiz sabit n bitli tamsayı | 0 | n bit (max) |
int_leastn_t | işaretli minimum n bitli tamsayı | n bit (min) | n bit (max) |
uint_leastn_t | İşaretsiz minimum n bitli tamsayı | 0 | n bit (max) |
int_fastn_t | İşaretli n bitli en hızlı tamsayı | n bit (min) | n bit (max) |
uint_fastn_t | İşaretsiz n bitli en hızlı tamsayı | 0 | n bit (max) |
intptrn_t | İşaretli n bitli pointer tutabilen tamsayı | n bit (min) | n bit (max) |
uintptrn_t | İşaretsiz n bitli pointer tutabilen tamsayı | 0 | n bit (max) |
intmaxn_t | İşaretli maksimum n bitli tamsayı | n bit (min) | n bit (max) |
uintmaxn_t | İşaretsiz maksimum n bitli tamsayı | 0 | n bit (max) |
Yukarıdaki tabloda bellekte kaplayacağı alan sabit veya belirli değerler arasına sabitlenmiş olan veri türleri anahtar kelimeleri ile birlikte verilmiştir. Bu kapsamda aşağıdaki kod sabit genişlikli veri türlerine örnektir.
#include<stdio.h>
#include<stdint.h>
int main(){
uint8_t sayi = 255;
sayi++;
printf("sayi + 1 = %d",sayi);
return 0;
}
Çıktı:
sayi + 1 = 0
Yukarıdaki örnekte tanımlanan 8 bit sabit uzunluktaki değişkenin 255 değerinden sonra 1 artırılarak 0 değerine geçtiği gözlenmiştir. Bu durumda uint8_t veri türünün işaretsiz 8 bit uzunluğunda bir tamsayı tanımladığı rahatlıkla görülebilir.
Sabit genişlikli veri türlerinin kullanılabilmesi için veri türlerinin içerisinde tanımlandığı stdint.h dosyası programa dahil edilmelidir.
C programlama dilinde kullanılan çok sık kullanılan ve bilinen veri türlerine bu yazıda değindim.
Yorum bölümünden tüm sorularınızı bana iletebilirsiniz.
Çalışmalarınızda başarılar dilerim.
Hamit Can Dinç.