Her Yönüyle C
Would you like to react to this message? Create an account in a few clicks or log in to continue.
Her Yönüyle C

Hepsi Burada
 
AnasayfaAnasayfa  PortalliPortalli  GaleriGaleri  AramaArama  Latest imagesLatest images  Kayıt OlKayıt Ol  Giriş yapGiriş yap  

 

 VERİ TİPLERİ

Aşağa gitmek 
YazarMesaj
Admin
Admin
Admin


Erkek
Mesaj Sayısı : 804
Yaş : 35
Location : KoCaElİ
Kayıt tarihi : 29/10/07

Character sheet
Field:
VERİ TİPLERİ Left_bar_bleue100/100VERİ TİPLERİ Empty_bar_bleue  (100/100)

VERİ TİPLERİ Empty
MesajKonu: VERİ TİPLERİ   VERİ TİPLERİ Icon_minitimePtsi Kas. 12, 2007 2:51 am

GirişOrta ve yüksek seviyeli dillerin hemen hemen hepsinde veri tipi ve değişken kavramı bulunmaktadır. Bu kısımda C programlama dilindeki temel veri tipleri, tanımlayıcılar, değişkenler ve sabitler konu edilecektir.

2.1 Veri TipleriVeri 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:
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: 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
Kısa ve uzun tamsayı tutacak tanımlayıcılar için int anahtar kelimesinin yazılmasına gerek yoktur. short s; /* short int s; anlamında */
long k; /* long int k; anlamında */
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




[color=gray] 1:
/* 02prg01.c : sizeof operatörünün kullanımı */
2:
3: #include <stdio>
4:
5: main()
6: {
7: printf( "char : %d bayt\n", sizeof(char));
8: printf( "short : %d bayt\n", sizeof(short));
9: printf( "int : %d bayt\n", sizeof(int));
10: printf( "long : %d bayt\n", sizeof(long));
11: printf( "unsigned char : %d bayt\n", sizeof(unsigned char));
12: printf( "unsigned short : %d bayt\n", sizeof(unsigned short));
13: printf( "unsigned int : %d bayt\n", sizeof(unsigned int));
14: printf( "unsigned long : %d bayt\n", sizeof(unsigned long));
15: printf( "float : %d bayt\n", sizeof(float));
16: printf( "double : %d bayt\n", sizeof(double));
17: printf( "long double : %d bayt\n", sizeof(long double));
[color:4af9=gray:4af9]18: }

ÇIKTI



Windows (32 bit) Turbo C
Windows (32 bit) Salford
Linux (32 bit) GCC
Linux (64 bit) GCC

char : 1 bayt
short : 2 bayt
int : 2 bayt
long : 4 bayt
unsigned char : 1 bayt
unsigned short : 2 bayt
unsigned int : 2 bayt
unsigned long : 4 bayt
float : 4 bayt
double : 8 bayt
long double : 10 bayt
char : 1 bayt
short : 2 bayt
int : 4 bayt
long : 4 bayt
unsigned char : 1 bayt
unsigned short : 2 bayt
unsigned int : 4 bayt
unsigned long : 4 bayt
float : 4 bayt
double : 8 bayt
long double : 10 bayt
char : 1 bayt
short : 2 bayt
int : 4 bayt
long : 4 bayt
unsigned char : 1 bayt
unsigned short : 2 bayt
unsigned int : 4 bayt
unsigned long : 4 bayt
float : 4 bayt
double : 8 bayt
long double : 12 bayt
char : 1 bayt
short : 2 bayt
int : 4 bayt
long : 8 bayt
unsigned char : 1 bayt
unsigned short : 2 bayt
unsigned int : 4 bayt
unsigned long : 8 bayt
float : 4 bayt
double : 8 bayt
long double : 16 bayt
int ve türevleri veri tipleri 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 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

2.2 DeğişkenlerDeğişkenler bilgisayarın geçici belleğinde bilginin saklandığı gözlere verilen sembolik adlardır. Bir C programında, bir değişken tanımlandığında bu değişken için bellekte bir yer ayrılır. Her değişkenin tuttuğu değerin nasıl bir veri olduğunu gösteren (önceki bölümde anlatılan) bir veri tipi vardır [1], [3].
Değişkenler (ve sabitler) programın başında bulunmalıdır. Bazı uygulamalarda değişkenin bir başlangıç değerinin olması istenir. Böyle durumlarda değişken bildirilirken başlangıç değeri verilebilir. Örneğin:
char isim='X', z; /* değer atamak zorunlu değil */
int sayi=0, n;
float toplam=0.0, sonuc=22.14;

Değişken isimleri verirken bazı kurallara uymak zorunludur. Bunlar:

  • Değişken adları en fazla 32 karakterden oluşabilir. 32 karakterden uzun değişken adları ilk 32 karakteri değerlendirilir. Geriye kalan karakterler işleme tabi tutulmaz.
  • Değişken adları ingiliz alfabesinde bulunan karakterler (A-Z) veya (a-z) yada rakamlar (0-9) ile yazılmalıdır. Türkçe karakter kullanılamaz.
  • Değişken adları herhangi bir rakam ile başlayamaz. Ilk karakter bir harf olamalıdır.
  • Aşağıda verilen kelimeler ANSI C 'nin anahtar kelimeleridir (key words) ve değişken ismi olarak kullanılamaz. auto double int struct
    break else long switch
    case enum register typedef
    char extern return union
    const float short unsigned
    continue for signed void
    default goto sizeof volatile
    do if static while


2.3 SabitlerSabit bildirimi, başlangıç değeri verilen değişken bildirimi gibi yapılır. Ancak; veri tipinin önüne const anahtar sözcüğü koyulmalıdır. Örneğin:
const float PI = 3.142857;
const double NOT= 12345.8596235489;
const int EOF= -1;
const char[] = "devam etmek için bir tuşa basın...";
gibi sabit bildirimleri geçerli olup bunların içerikleri program boyunca değiştirilemez. Yalnızca kullanılabilir. Genellikle, sabit olarak bildirilen değişken isimleri büyük harflerle, diğer değişken isimlerinin ise küçük harflerle yazılması (gösterilmesi) C programcıları tarafından geleneksel hale gelmiştir.
Birçok C programında sabitler #define önişlemci komutu ile de tanımlandığını görebilirsiniz. Bu komutla sabit bildirimi, bir program parçasına ve makro fonksiyon tanımlaması yapılabilir. Bir program geliştirilirken simgesel sabitlerin kullanılması programın okunurluğunu arttırır ve bazen gerekli de olabilir. Aşağıda verilen simgesel sabit bildirimleri geçerlidir. #define önişlemcisi ile makro fonksiyon tanımalama işlemi Ders20: C Makroları bölümünde anlatılacaktır.
#define MAX 100
#define DATA 0x0378
#define YARICAP 14.22

2.4 Sabit RakamlarC programlama dili içinde tanımlanabilecek sabit rakamlar hazır bilgi (literal) olarak adlandırılır. Her veri tipi kendi hazır bilgisine sahiptir. Hazır bilgiler, kaynak kod içerisinde, özel değerleri ifade eder. Örneğin aşağıdaki atama işleminde 25 ve 17.2 sayıları birer hazır bilgidir:
i = 25; /* int tipinde bir rakam */
r = 17.2; /* double tipinde bir rakam */
C dilinde bütün tamsayı sabitler varsayılan (default) olarak int tipinde, gerçel sayı sabitler varsayılan olarak double tipindedir. Ancak sabitleri gösteren rakamların sonuna eklenen U (veya u), L (veya l) ve F (veya f) harfleri ile bu durum değiştirilebilir. Aşağıdaki atamalar aynı anlamda değildir. i = 25; /* int rakam */
i = 25U; /* unsigned int rakam */
i = 25L; /* long int rakam */
i = 25UL; /* unsigned long rakam */
i = 25L; /* long int rakam */

r = 17.2; /* double rakam */
r = 17.2L; /* long double rakam */
r = 17.2F; /* float rakam */
Tamsayı (int) sabit rakamları 8 (oktal) ve 16 (hexadesimal) sayı tabanında da ifade edilebilir. Bunun için sabit rakamın başına, 8 için 0 (sıfır) ve 16 için 0x sembolleri eklenir. Aşağıdaki atmalar aynı anlmadadır: i = 75; /* 10 tabanında */
i = 0113; /* 8 tabanında */
i = 0x4b; /* 16 tabanında */
i = 0x4B; /* 16 tabanında */
Karakter sabitler, bir harf için tek tırnak veya birden çok karakter için çift tırnak içinde belirtilirler. 'A' /* bir karakter */
"Merhaba Dunya" /* bir karakter kümesi */

2.5 Değişken Bildirim Yerleri ve Türleri

Yerel (local) BildirimYerel değişkenler kullanıldığı fonksiyon içerisinde bildirilir. Yalnızca bildirildiği fonksiyon içerisinde tanınır ve kullanılabilir.
int topla(int a,int b)
{
/* yerel (local) değişken c nin bildirimi */
int c;
c = a + b;
return c;
}

Genel (general) BildirimGenel değişkenler bütün fonksiyonların dışında bildirilir. Bir değişken program boyunca sürekli olarak kullanılıyorsa genel olarak bildirilmelidir.
#include <stdio>

void karesi();

/* m ve n global tip değişkendir.
Bu iki değişken tüm program boyunca kullanılmaktadır. */

int m,n;

main(){
m=7;
karesi();
printf("%d nin karesi %d dir",m,n);
}

void karesi(){
n = m*m;
}
2.6 Tip DönüşümleriBir formül içerisinde bir çok değişken veya sabit olabilir. Bu değişken ve sabitler birbirinden farklı tipte olursa, hesap sonucunun hangi tipte olacağı önemlidir. Bir bağıntıda, içeriği dönüşüme uğrayan değişkenler eski içeriklerini korurlar. 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.

char kr;
int tam;
long int ltam;
unsigned int utam;
short int stam;
float f;
double d;

bildirimlerine göre: Bağıntı Sonuç Tipi
------- ----------
kr+5 int
kr+5.0 double
d+tam double
f+d-2 double
utam-tam unsigned
ltam*tam long
tam/2 int
tam/2.0 double






NOT
Tamsayılar arası bölme kesme hatalarına (truncation error) neden olur. Bunun anlamı iki tamsayının oranı yine bir tamsayıdır.
örneğin: 4/2=2; ama 3/2=1 (1.5 değil).
Bir değişkenin sabit değerin veya bağıntının önüne tür veya takı (cast) yazılarak sonucun hangi tip çıkması istendiği söylenebilir. Genel yazım biçimi:
(tür tipi) bağıntı;
Örneğin: int x=9;
float a,b,c;
double d;
...
a = x/4;
b = x/4.0;
c = (float) x/4;

işleminin sonucunda a değişkenine 2.0, b ve c değişkenlerine 2.25 değeri aktarılır. Yani 9/4 ile 9/4.0 farklı anlamdadır.
Sayfa başına dön Aşağa gitmek
https://cprogramlama.yetkin-forum.com
 
VERİ TİPLERİ
Sayfa başına dön 
1 sayfadaki 1 sayfası

Bu forumun müsaadesi var:Bu forumdaki mesajlara cevap veremezsiniz
Her Yönüyle C :: C Programlama :: C Konu Anlatımları-
Buraya geçin: