İçindekiler

C Programlamada Veri Tipleri

C Programlamada Veri Tipleri

Temel Veri Tipleri (Primary Data Type )
  • char : karakter
  • int : tamsayılar
  • float : ondalıklı gerçek sayı (6.basamağa kadar hassasiyet)
  • double : ondalıklı gerçek sayı (10. basamağa kadar hassasiyet)
  • void : boş veri tipi

C Programlama Dilin'de temel veri tiplerinin yanı sıra birde özel veri tipleri bulunmaktadır.

Özel Veri Tipleri (Secondary Data Type)

  • array : dizi
  • pointer : işaretci
  • structure : veri yapısı
  • enum : sıralanmış değerler
  • union: farklı tür ve boyutlardaki veriler

Temel Veri Tipleri (Primary Data Type ) 
 

CHAR Veri Tipi : Karakter değişkenlerini tutmak için tasarlanmış veri tipidir. char veri tipinde değişkenler  bellekte 1 byte alan kaplamaktadırlar. char veri tipi karakter değişkenlerini saklamasına rağmen sayısal bir veri tipidir. Çünkü C Programlama Dilinde her karakterin sayısal bir karşılığı vardır.En basit anlatımla karakterlerin sayısal karşılıkları American Standart Kodlaması olarak bilinen ASCII (American Standart Code for Information Interchange) tablosudur. ASCII kodlama tablosu sadece C diline özgü değil bütün programlama dillerinde karakterlerin sayısal karşılığını tutmak için kullanılmaktadır.
 

C Programlamada Veri Tipleri

ASCII tablosunda 72 sayısının H karakterine 104 sayısınında h karakterine karşılık geldiğini görmekteyiz. Örneğin char ornekch = 'H' ifadesinde ornekch isimli karakter değişkene ASCII tablosunda H harfinin karşılığı 40 sayısını atamaktadır. Yazmış olduğumuz kod parçasında görüldüğü gibi karakter değeri tek tırnak işaretleri arasındadır. Aynı şekilde  chat ornekch = '72' yazım şekliylede ornekch isimli karakter değişkene atama yapabiliriz. char tipindeki değişkenlerin ASCII karşılığını printf fonksiyonuyla yazdırmak istediğimizde %c niteleyicisini kullanmalıyız.

printf("ornekch degiskeninin karakter degeri:%cn",ornekch);

  Örnek char veri tipi

#include <stdio.h>

int main(int argc, char** argv)
{
    char ornekch1  ='H';
    char ornekch2  =67;
    char ornekch3  =84;

    printf("ornekch1 degiskeninin karakter degeri:%cn", ornekch1);
    printf("ornekch1 degiskeninin sayi degeri:%dnn", ornekch1);

    printf("ornekch2 degiskeninin karakter degeri:%cn", ornekch2);
    printf("ornekch2 degiskeninin sayi degeri:%dnn", ornekch2);

    printf("ornekch3 degiskeninin karakter degeri:%cn", ornekch3);
    printf("ornekch3 degiskeninin sayi degeri:%dnn", ornekch3);

    return 0;
}
 

C Programlamada Veri Tipleri

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv) {

    char harfi1 = 'a';
    char harf2 = 97;

    //printf("brinci harf:%c ikinci harf:%h", harfi1, harf2);

    printf("n %c%c%c%c%c%c%c %c%c%c%c%c%c%c%c", 'c', 97, 103, 'l', 97, 'r', 0, 's', 'a', 'y', 'g','i', 'l','a', 'r');
   
    printf("n c=%d a=%d g=%d l=%d a=%d r=%d",'c', 97, 103, 'l', 'a', 'r');
   
    return (EXIT_SUCCESS);
}

 

INT Veri Tipi : Tamsayı değerlerini tutmak için kullanılır. int veri tipi bellekte en az 2 byte veya 16 bit yer tutarlar.İngilizcede tamsayı anlamına gelen integer kelimesinden gelmektedir. Program içerisinde int tipine sahip ts adında bir tamsayı değişken tanımlayarak kullanımını görelim.

Örnek int veri tipi

#include <stdio.h>

int main(int argc, char** argv)
{
    signed int ts = 226;
    printf("ornek int veri tipi ts degiskeninin degeri: %dn", ts);
    return 0;
}

 

C Programlamada Veri Tipleri

printf  içerisinde tam sayı tipinde değişkenler %d biçim niteleyicisiyle yazılırlar.
 

FLOAT Veri Tipi : Ondalık sayılarımızı tutmak için kullanırız. Ondalık sayılar için kullanılan temel iki veri tipinden birisi float'dır. float veri tipini diğerinden farklı kılan özelliği virgülden sonra 6 sayıya kadar sayıları bellekte tutabilen bir veri tipi olmasıdır. float veri tipinde değişkenler bellekte en az 4 byte veya 32 bit yer tutarlar. float tipinde değişkenler %f biçim niteleyicisiyle yazılırlar. 

DOUBLE Veri Tipi :  Long Float olarak da bilinir. Aynen float gibi ondalık sayılarımızı tutmak için kullanırız. float ve double arasındaki fark ise double veri tipinin çift duyarlılıklı ve 8 byte veya 64 bit yer kaplamasıdır. Ayrıca double veri tipinde virgülden sonra 10.basamağa kadar hassasiyetteki sayılar tutulabilir. Tıpkı float tipindeki değişkenlerde kullandığımız gibi double veri tipinde de biçim niteleyicisi olarak %f ve %lf kullanılır. Double tipi, ondalıklı sayıların tanımlanmasında kullanılır. Ondalıklı sayılaryapıları gereği tamsayıları da kapsar. 
 
Örnek float ve double veri tipleri
 
#include <stdio.h>
#include <conio.h>

int main()
{
  float  d = 2.7;
  double e = 27.7;

  printf("f  = %fn", d);
  printf("d  = %lfn",e);

getch();
 return 0;
}
 
 

C Programlamada Veri Tipleri

VOID Veri Tipi : Genelde değişken tanımlanırken kullanılmaz. Amacı fonksiyonların parametre almadığını veya parametre döndürmediğini göstermek için kullanılır.

Temel Veri Tiplerinin Türevleri

C Programlama dilinde temel veri tiplerinin yetersiz kaldığı durumlarda bu tiplerin önüne signed, unsigned, long ve short anahtar kelimeleriyle, temel veri tipleri esas alınarak yeni veri tipleri oluşturulmuştur..Veri tiplerinin byte olarak boyutlarını ve sınırlarını dönüştürebilirsiniz. Bu dönüşümlerde kullanılabilecek veri türleri aşağıda gösterilmektedir:

Değiştirici    Veri Türü
    
signed         char, int    
unsigned       char, int    
long           int, double  
short          int
 

Değişken tanımlamalarında signed değiştirici ifadesi kullanıldığında, tanımlanan değişkenin ikili sayı sistem değeri içinde en üst sırada yer alan bit'i işaret bit'i olarak kullanılır. Bu değer 0 olursa sayı pozitif, 1 olursa sayı negatif olur. Ancak, bu durumda bir bit sayının işaretini belirlemek için ayrıldığından tanımlanan değişkene atanacak değer otomatik olarak azalır.

Örneğin double ifadesinin önüne long ifadesi eklendiğinde  oluşturulan long double veri tipi bellekte double için kullanılan 8 byte olan alanı 10 byte'a çıkarır. Değiştirici kelimeler her veri tipinin önünde kullanılamazlar. Dönüştürme işlemi için geçiçi bellek alanı kullanılır; dönüştürülen değer kullanıldıktan sonra o alan serbest bırakılır.

 

C Programlamada Veri Tipleri

Type Explanation Format Specifier
char Smallest addressable unit of the machine that can contain basic character set. It is an integer type. Actual type can be either signed or unsigned depending on the implementation.  %c
signed char Of the same size as char, but guaranteed to be signed.  %c
unsigned char Of the same size as char, but guaranteed to be unsigned.  %c
short
short int
signed short
signed short int
Short signed integer type. Capable of containing at least the [−32767,+32767] range;[3] thus, it is at least 16 bits in size.  %hi
unsigned short
unsigned short int
The same as short, but unsigned.  %hu
int
signed int
Basic signed integer type. Capable of containing at least the [−32767,+32767] range;[3] thus, it is at least 16 bits in size.  %i or %d
unsigned
unsigned int
The same as int, but unsigned.  %u
long
long int
signed long
signed long int
Long signed integer type. Capable of containing at least the [−2147483647,+2147483647] range;[3] thus, it is at least 32 bits in size.  %li
unsigned long
unsigned long int
The same as long, but unsigned.  %lu
long long
long long int
signed long long
signed long long int
Long long signed integer type. Capable of containing at least the [−9223372036854775807,+9223372036854775807] range;[3] thus, it is at least 64 bits in size. Specified since the C99 version of the standard.  %lli
unsigned long long
unsigned long long int
The same as long long, but unsigned. Specified since the C99 version of the standard.  %llu
float Real floating-point type, usually referred to as a single-precision floating-point type. Actual properties unspecified (except minimum limits), however on most systems this is the IEEE 754 single-precision binary floating-point format. This format is required by the optional Annex F "IEC 60559 floating-point arithmetic".  %f
double Real floating-point type, usually referred to as a double-precision floating-point type. Actual properties unspecified (except minimum limits), however on most systems this is the IEEE 754 double-precision binary floating-point format. This format is required by the optional Annex F "IEC 60559 floating-point arithmetic".  %f
long double Real floating-point type, usually mapped to an extended precision floating-point number format. Actual properties unspecified. Unlike types float and double, it can be either 80-bit floating point format, the non-IEEE "double-double" or IEEE 754 quadruple-precision floating-point format if a higher precision format is provided, otherwise it is the same as double. See the article on long double for details.  %lf

Karekter veri tipi char dışındaki diğer tamsayı veri tiplerinde unsigned veya signed ifadesi kullanılmazsa default olarak signed kabul edilir. char veri tipinde ise değişken tanımladığımızda değişkenin signed'mı unsigned'mı olacağı derleyiciye bırakılmıştır.


Temel veri tiplerinin yetersiz kaldığı durumlarda anahtar kelimeleri kullandığımız zaman, printf() ve scanf() fonksiyonları farklı biçim niteleyicileri kullanırlar. 

C Programlamada Veri Tipleri

C Veri Tiplerinin Maksimum Alabileceği Değerleri Gösteren Uygulama

// C program to print range of basic data types
#include <stdio.h>
#include <stdlib.h>

// Prints min and max value for a signed type
void printUnsignedRange(size_t bytes){
 
    int bits = 8*bytes;
    // Note that the value of ‘to’ is "(1 << bits) – 1"
    // Writing it in following way doesn’t cause overflow
    unsigned int to = ((1 << (bits-1)) - 1) + (1 << (bits-1)) ;
 
    printf(" range is from %u to %u n", 0, to);
}
 
// Prints min and max value for an unsigned type
void printSignedRange(size_t bytes){

   int bits = 8*bytes;
   int from = -(1 << (bits-1));
   int to =  (1 << (bits-1)) - 1;
   printf(" range is from %d to %dn", from, to);
}
 
int main(){
   
    printf("signed char: ");
    printSignedRange(sizeof(char));
 
    printf("unsigned char: ");
    printUnsignedRange(sizeof(unsigned char));
 
    printf("signed int: ");
    printSignedRange(sizeof(int));
 
    printf("unsigned int: ");
    printUnsignedRange(sizeof(unsigned int));
 
    printf("signed short int: ");
    printSignedRange(sizeof(short int));
 
    printf("unsigned short int: ");
    printUnsignedRange(sizeof(unsigned short int));
 
    return 0;
}

 

C Programlamada Veri Tipleri

Örnekler yer değiştirme, veri tipi dönüşümü ve biçim niteleyici kullanımı

main(){

  int x1;
  double x2;

  x2 = 332.544;
  x1 = x2;

  printf("%f %d %d", x2, x1, (int) x2);
}

  Programımızda double bir değişkene atanan değeri, int bir değişkene atanır. İki değişkende değerini double değişken değerine yer değiştirme (type cast) metodu ile geçici olarak int bir değere çevirerek tekrar ekrana yazar. Atama işlemlerinde, atama işaretinin sol tarafında type cast metodu kullanılamaz.

 
#include "stdio.h"

main()
{
  unsigned int x1;
  float x2;

  x1 = 32648;
  x2 = 295.54;

  printf("%f", x1*x2);
}
 
 
 
Örnekte programımız unsigned int bir değerle float bir değerin çarpımını ekrana yazar. C Programlama dilinde float ve unsigned int değerleri aynı ifade içinde kullandığından sonuç float bir değer olarak karşımıza çıkacaktır.
 

 

#include "stdio.h"

main()
{
  int x1, x2;
  float x3;

  x1 = 24, x2 = 2, x3 = 53;

  printf("%f", x3/(x1/x2));
}

 

Tip dönüşümü, bir ifade içinde işlem yapıldığından, önce x1 ve x2 değişken değerlerinin bölme sonucu olan 12 değeri elde edilir. Bunun nedeni her iki sayınında int bir değer olmasıdır. Daha sonra float olarak tanımlanmış olan x3 12'ye bölündüğünde, program işlem sonucunu ondalık hanesini içerecek şekilde verir.

C Programlama Dilin'de , bir ifade içinde bir char veya short int veri kullanıldığında, bu verilerin değerleri int değere çevrilir. Otomatik veri çeşidi değişimleri yapıldıktan sonra, program ifadelerde yer alan bütün verileri aynı ifade içindeki en büyük verinin çeşidine çevirir.

Sabit Değer Tipleri

 
#include <stdio.h>
#include <stdlib.h>

int main(void){
   
    const float pi=3.14;
 
     #define ResimBuyuklugu 640; //sabit deger atamalarinda kullanilir ve programin basinda yer alir

    //ResimBuyuklugu=849;  define ile daha önce tanimlandigi icin degistirilemez

    return 0;
           
}