Ya arkadaşlar, biz geçen derste “int” mint bişiler kullanmıştık ya hani. Ben “int”e tamsayı demiştim. Şimdi bu “int” ve kardeşleri nedir ona bakacaz. Bi de fonksiyon oluşturmayı öğrenecez.

Başlamadan önce hatırlatiyim. RAM’de bilgi saklarken, en küçük birimimiz bit. 1 bit. Ama RAM’i bit bit ayırmak mantıksız (makinenin hızını azaltır). Biz de 8 bit’e 1 byte demişiz. RAM byte byte ayrılmıştır. Yani RAM’de “abi, bi bite bakıp çıkıcam” diye bi hakkımız yok. Baktın mı en az 1 byte.

Veri Türleri

Gençlik yıllarımıza :) dönelim. Hepimizin bir numarası vardı, dimi? Koyun sayar gibi yoklama yaparlardı :) Şimdi düşünelim. Hepimizin en az bir ismi, ve bir de soyismi var. Numaralar niye?

Bize aşağılık kompleksi yaşatmak için tabi ki. Bi de daha kolay okunuyo: “Serkan Mustafa RAMAZAN” yerine “Otuz altı” gibi. Ama ikisi de aynı kapıya çıkıyo: Koyun gibi sayıyolar bizi!

Şimdi, 36 ve “Serkan Mustafa RAMAZAN” (aranızda böyle birisi varsa şimdiden özür dilerim =), ama örneğimiz bu olacak ) programcı açısından birer veri. Biri “tam sayı”, diğeri “karakter dizisi”. Türleri farklı. C dilinde her değişkenin, fonksiyonun, sabitin bir türü vardır. Ya da özel tür: “void” ‘dir. “void”, “türü yok” türüdür. Yani, türümüz yoksa bile vardır(bkz:”yok yok ise vardır”). Garip bi durum. Ama alışınca güzel oluyo.

Veri türlerini inceleyelim:

1.) int

Gün gelecek, “Hay, Allah belasını versin bu int’in!” diyceksiniz :) . Demiyosanız sorun var demektir.

“int”, en çok kullanılan değişken türüdür. Misal: “Hilmi abi, MSN hackleyen fonksiyon yazdım, dönüş türünü ne seçiyim?”, “int yap, int. int iyidir.” . Evet, int iyidir. Çünkü, işlemcinizin özelliklerine cuk diye oturur ( Bunu açıklamam için makine yapısına girmem lazım. Sizin iyiliğiniz için girmiyorum =) ).

Evet arkadaşlar, acı gerçek: derleyiciler de birer programdır. Bunu niye söylüyorum? Şimdi, 64-Bit bi işlemciniz var diyelim. Buna 32-Bit Windows ya da (küçük bi ihtimal) Linux kurdunuz diyelim. 64-Bit olmanın getirdiği hiç bi ayrıcalık kalmadı. Niye? Çünkü, yüklediğiniz yazılım 32-Bit için derlenmiş. Yani, hangi işlemcide olduğunuz kadar, kodun hangi işlemci için derlendiği de önemli.

İşte bu yüzden, Hem MSVC, hem CB, ayarlarında, kaç bitlik kod yaratılacağını seçmenizi sağlıyo. Biz, 32-Bit’lik bir sistemde olduğunuzu(ben öyleyim şu an) varsayıyoruz. C dili değişmiyo. Ama bi kod beklediğinizden faklı çalışırsa ( 4294967295 + 1 dediğinizde “0″ değil de “4294967296″ alırsanız misal ) bunun nedeni, 32-bit - 64-bit yüzünden olabilir. Ama biz, bilgilerimizi, 32-bite göre verecez.

Bu kadar taksim yeter. Esas bilgiye geçelim. int, tamsayı tipini anlatır ( 3, 5, 45250545, -1, -112233 gibi ) . Arkadaşlar, int, uzunluk olarak, işlemcinin bit sayısına eşittir. Yani 32 bit. 8 bit=1byte. Burdan bir int RAM’de 4 byte kaplar.

int, işaretli ya da işaretsiz olabilir. Bu konuda bilgiyi “long” ve “short” kısmında bulabilirsiniz.

Yapısal olarak bir int 2^32 ( 2 üzeri 32 - yani 4294967296 ) farklı değer alabilir. Bu değerler şu şekilde dağılır:

Tür -Değer Alt Sınır Üst Sınır
İşaretli -2 147 483 648 2 147 483 647
İşaretsiz 0 4 294 967 296

Tablo yapmak kasıyo( WP saolsun, işimizi kolaylaştırmıyo hiç ). Fark ettiyseniz, işaretli int’te alt sınır daha geniş. Nedeni x86 ( bildiğin masaüstü, laptop ) mimarisiyle(işlemcinin devreleri) ilgili. Normalde 2 tane 0 gösterebiliyoz ( +0, -0). E bunlar birbirine eşit, o yüzden, birini eksilere verelim demişler.

Unutmadan. C dili int’i çok sever. Bu yüzden, eğer bişey tanımlarken tür vermezseniz “int” varsayar. Hemde işaretli int. Tanımlama yapmaya 3. bölümde geçicez. Biraz beklemeniz gerekcek.

2.) char

char türü, boyutu belli olan tek türdür. char kesinlikle 1 byte olmalıdır. Ama işaretli mi, işaretsiz mi olacağı belli değildir ( MSVC ve CB işaretli kullanıyo ) . Karakter tutmak için düşünülmüştür, tek bi karakter. Artık o tek karakteri ne yapacağınız size kalmış.

Tür -Değer Alt Sınır Üst Sınır
İşaretli -128 127
İşaretsiz 0 255

Evet, yukarıda da veri tipinin limitlerini görmekteyiz. Ama sakın bu tabloya bakıp, “Ben bu veri tipini harf tutmaktan başka ne için kullaniyi ki”demeyin :) Bilgisayarda renkler ya da programın ürettiği veriler genellikle işaretsiz char olarak tanımlanır.

3.) float

Güzel isim di mi? “float”, “floating point”in kısaltması gibi bişey. “floating point” ise, “kayan nokta” demek. Evet, sayımızda bi nokta var. Yani, ondalık sayıları tutuyoruz. “kayan” olayı ise sayının bilgisayarda nasıl tutulduğuyla ilgili. Bi ara sırf bu konuda bi yazı yazıcaz ama, hadi hayırlısı. Siz sadece, bu türde ondalık sayıların, belirli bir kesinlike tutulduğunu(yani hesaplarda ufak kaymalar olabileceğini) bilin. Alt ve üst limitleri vermiycem çünkü ben de bilmiyom. Ve google’da aratmayacak kadar yorgunum şu an(saat 01:37). Bu sefer siz bulun. “36 Serkan Mustafa RAMAZAN. Senin ödevin. Bi dahaki derse bul, getir.” :D

Not: float 32-bit, 4 byte’tır.

4.) double

“float” iyi, ama küçük geldi bea. Bunun bi büyüğü var mı? diyenlere cevaptır. Kesinliği, float’ın 2 katıdır :) O yüzden double diyolar zaten. “double precision”, yani çift kesinlik(float’a da “single precision”, “tek kesinlik” derler). float yetmezse double kullanırız. Ya da sadece daha kesin sonuçlar almak için. Bu arada unutmadan, double 64-bit, 8 byte’tır. C dili ondalık sayılarda double’ı kayırır. nerede “1.0″, “127.8″ görse, tür olarak double seçer. Yok “ben float olsun istiyom” diyosan, sayının sonuna bi “f” ekliyosun. Misal: “896413.25f”

Bu ders bu kadar. Gelecek bölümde türlerin özelliklerini hafif değiştiran anahtar kelimelere bakcaz. Şimdi örnek olarak aşağıdakilerin türlerini, işaretli mi, işaretsiz türde mi yazılmaları gerektiğini bulun. KOPYA ÇEKMEK YOK. ÇEKENİ ATARIM BLOGDAN :)

127 // char olsun bu
112
12.777
3333333333
2377.6456f
1111111111
-0.000001f
200 // char olsun
33.0
-1 // char olsun
300
Bu yazı 26 Temmuz 2008, Cumartesi günü gönderildi.
Toplamda 119 kere okundu.
Kategorileri: C Anlatım.
Etiketler:,
OOOOO
4 oy - Sonuçları görmek için oylayın!

8 yorum var.

  1. Zafi

    Cevabı buraya yazıyomuyuz ? :D

  2. r-G0ne

    hayır :) uygun bir zamanda sayfayı testler bölümüne taşıycam

  3. Zafi

    Bu dersin ikinci bölümü kayboldu…

  4. r-G0ne

    ikinci bölümü gerekli düzenlemelerden sonra(yarın ya da ertesi gün) yayınlıyorum. Fonksiyon tanımlama konusunda, türlerin özelliklerini hafiften değiştiren anahtar kelimeler(t.ö.h.d.a.k diyelim), isimlendirme ve printf konsunda kısa ve öz bir ders olacak inşallah

  5. Hocam alt programlamada sorun yaşıyorumda.Nasıl sorucam ?

  6. r-G0ne

    buraya sor direkt. yorum olarak kalması daha iyi

  7. Ya şimdi değerleri normal main fonksiyonunda giriyorum ama alt programa sadece bir değer (değişken yada herneyse) aktarabiliyorum.Mesela a,b değişkenleri main fonksiyonun da tanımlanmış.Ama işlemin alt programda(fonksiyon yada herneyse) olmasını istiyorum.İki yada daha fazla değer çağırmanın yöntemi nedir.Örnekle gösterirsen sevinirim. (Çömüz daha programlamada :masumsimili:)

  8. r-G0ne

    değişkenler, şu an uyguladığımız öğrenim sisteminde çok ilerde kalıyor(daha en az 2-3 ders var). kullandığım sistem daha önceden denendiğini görmediğim bir yöntem.(ama odtü buna benzer bişey uyguluyor). o yüzden soruyu özelden cevaplandıracağım(yorumdaki mail üzerinden) yarın da son iki yorumu siliyorum :) kafaları karıştırabilir

“C Dili: Ders 2 - Veri Türleri ve Fonksiyonlar (I)” yazısına yorum yapın.