27 Nisan 2020

#4 C Dili: Veri Türleri

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 KelimeVeri TürüBoyutMinimumMaximumBiç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 byte04.294.967.295%u
short
short int
signed short
signed short int
İşaretli kısa tamsayı2 byte-32.76832.767%hi
unsigned short
unsigned short int
İşaretsiz kısa tamsayı2 byte065.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 byte04.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 byte01.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 KelimeVeri TürüDuyarlılıkBoyutMinimumMaksimumBiçim
floatOndalıklı sayı6 basamak4 byte1.175494351 E – 383.402823466 E + 38%f
doubleUzun ondalıklı sayı15 basamak8 byte2.2250738585072014 E – 3081.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 KelimeVeri TürüBoyutMinimumMaksimumBiçim
charKarakter1 bytederleyiciye bağlıderleyiciye bağlı%c
signed charİşaretli karakter1 byte-128127%c, %hhi
unsigned charİşaretsiz karakter1 byte0255%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 KelimeVeri TürüMinimum DeğerMaksimum Değer
intn_tİşaretli sabit n bitli tamsayın bit (min)n bit (max)
uintn_tİşaretsiz sabit n bitli tamsayı0n bit (max)
int_leastn_tişaretli minimum n bitli tamsayın bit (min)n bit (max)
uint_leastn_tİşaretsiz minimum n bitli tamsayı0n 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ı0n bit (max)
intptrn_tİşaretli n bitli pointer tutabilen tamsayın bit (min)n bit (max)
uintptrn_tİşaretsiz n bitli pointer tutabilen tamsayı0n bit (max)
intmaxn_tİşaretli maksimum n bitli tamsayın bit (min)n bit (max)
uintmaxn_tİşaretsiz maksimum n bitli tamsayı0n 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ç.

Share

Hamit Can Dinç

Yıldız Teknik Üniversitesinde Elektrik Mühendisliği öğrencisi. Araştırma ve geliştirme odaklı projelerde yer almayı sever.

You may also like...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir