C Programlamada Veri Tipleri
İçindekiler
- 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;}
#include
#include 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- int main(int argc, char** argv){ - signed int ts = 226; - printf("ornek-int-veri-tipi-ts-degiskeninin-degeri:-%dn", ts); - return 0;} 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- #include- int main(){ float d = 2.7; double e = 27.7; printf("f- =-%fn", d); printf("d- =-%lfn",e);getch(); return 0;} 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ürevleric-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. 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 shortshort-intsigned-shortsigned-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-shortunsigned-short-int the-same-as short,-but-unsigned. %hu intsigned-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 unsignedunsigned-int the-same-as int,-but-unsigned. %u longlong-intsigned-longsigned-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-longunsigned-long-int the-same-as long,-but-unsigned. %lu long-longlong-long-intsigned-long-longsigned-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-longunsigned-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-veri-tiplerinin-maksimum-alabileceği-değerleri-gösteren-uygulama //-c-program-to-print-range-of-basic-data-types#include- #include- //-prints-min-and-max-value-for-a-signed-typevoid 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-typevoid 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;} Ö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- #include- 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; - - - - - } ">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. 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 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;} #include #include 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 int main(int argc, char** argv){ signed int ts = 226; printf("ornek int veri tipi ts degiskeninin degeri: %dn", ts); return 0;} 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 #include int main(){ float d = 2.7; double e = 27.7; printf("f = %fn", d); printf("d = %lfn",e);getch(); return 0;} 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ürevleriC 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. 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 shortshort intsigned shortsigned 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 shortunsigned short int The same as short, but unsigned. %hu intsigned 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 unsignedunsigned int The same as int, but unsigned. %u longlong intsigned longsigned 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 longunsigned long int The same as long, but unsigned. %lu long longlong long intsigned long longsigned 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 longunsigned 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 Veri Tiplerinin Maksimum Alabileceği Değerleri Gösteren Uygulama // C program to print range of basic data types#include #include // Prints min and max value for a signed typevoid 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 typevoid 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;} Ö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 #include 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; } - C Veri Tiplerinin Maksimum Alabileceği Değerleri Gösteren Uygulama
- Sabit Değer 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.
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;
}
#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;
}
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;
}
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.
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 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;
}
Ö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;
}
- 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 )
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.
Örnek char veri tipi
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;
}
#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
int main(int argc, char** argv)
{
signed int ts = 226;
printf("ornek int veri tipi ts degiskeninin degeri: %dn", ts);
return 0;
}
printf içerisinde tam sayı tipinde değişkenler %d 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.
#include <conio.h>
int main()
{
float d = 2.7;
double e = 27.7;
printf("f = %fn", d);
printf("d = %lfn",e);
getch();
return 0;
}
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.
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 Veri Tiplerinin Maksimum Alabileceği Değerleri Gösteren Uygulama
#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;
}
Örnekler yer değiştirme, veri tipi dönüşümü ve biçim niteleyici kullanımı
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.
main()
{
unsigned int x1;
float x2;
x1 = 32648;
x2 = 295.54;
printf("%f", x1*x2);
}
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 <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;
}