- Puan
- 28
- Yaş
- 118
Değişkenler, Veri Tipleri ve Bellek Mantığı
Birçok kişi C öğrenmeye başladığında değişkenleri sadece:int sayi = 5;olarak görür.
Ancak gerçekte işler bundan çok daha farklıdır.
Bu bölümde değişkenlerin gerçekten ne olduğunu, RAM içerisinde nasıl tutulduğunu ve veri tiplerinin neden var olduğunu öğreneceğiz.
Bilgisayar Verileri Nerede Saklar?
Bir program çalıştırıldığında veriler bilgisayarın RAM'ine yüklenir.RAM'i devasa bir depo gibi düşünebiliriz.
Örnek:
Kod:
------------------------------------------------
| 1000 | 1001 | 1002 | 1003 | 1004 | 1005 |
------------------------------------------------
Her kutunun bir adresi vardır.
Tıpkı ev adresleri gibi.
Bir değişken oluşturduğumuzda işletim sistemi RAM'de ona yer ayırır.
Örneğin:
int yas = 20;Yazdığımızda RAM'de şuna benzer bir durum oluşur:
Kod:
Adres Değer
1000 20
1001
1002
1003
Gerçekte adresler çok daha uzundur:
0x7ffeab123450Ancak mantık aynıdır.
Değişken Nedir?
Değişken:Örneğin:Bellekteki bir alanın insanlar tarafından okunabilir ismidir.
int yas = 20;Burada:
yasbir isimdir.
Bilgisayar aslında "yas" kelimesini kullanmaz.
Bilgisayarın gördüğü şey:
Kod:
Adres: 0x7ffeab123450
Değer: 20
şeklindedir.
Veri Tipleri Neden Var?
Bilgisayar ne kadar yer ayıracağını bilmek zorundadır.Örnek:
Bir harf saklamak istiyoruz.
'A'Bir de:
5000000saklamak istiyoruz.
Bu iki veri aynı büyüklükte değildir.
Bu yüzden veri tipleri vardır.
char Veri Tipi
Tek karakter tutar.char harf = 'A';Bellekte:
Aolarak değil:
65olarak tutulur.
Çünkü bilgisayar karakterleri ASCII tablosu ile saklar.
Örnek:
Kod:
A = 65
B = 66
C = 67
a = 97
b = 98
Kontrol edelim:
Kod:
char harf = 'A';
printf("%d", harf);
Çıktı:
65ASCII Tablosu Nedir?
ASCII karakterlerin sayısal karşılıklarıdır.Örnek:
Kod:
Karakter Sayı
A 65
B 66
C 67
D 68
Bu yüzden:
Kod:
char x = 65;
printf("%c", x);
çıktısı:
Aolacaktır.
int Veri Tipi
Tam sayıları saklar.Örnek:
int yas = 20;int puan = 150;int para = 100000;int Kaç Byte Yer Kaplar?
Modern sistemlerde genellikle:4 byteyer kaplar.
Kontrol edelim:
Kod:
#include <stdio.h>
int main()
{
printf("%zu", sizeof(int));
}
Çıktı:
4olacaktır.
Byte Nedir?
Bilgisayarın temel veri birimidir.1 byte = 8 bitÖrnek:
000000008 adet bit vardır.
Bu:
1 byteeder.
Bit Nedir?
Bilgisayarın anlayabildiği en küçük veri birimidir.Sadece:
0veya
1olabilir.
Örnek:
101010108 bit = 1 byte
4 Byte Kaç Bit Eder?
4 × 8 = 32 bitYani:
intçoğu sistemde:
32 bityer kaplar.
float Veri Tipi
Ondalıklı sayılar için kullanılır.Örnek:
float not = 85.75;float sicaklik = 36.6;float Bellekte Nasıl Saklanır?
Birçok kişi şöyle saklandığını sanır:36.6Hayır.
Bilgisayar bunu IEEE 754 standardına göre saklar.
Örneğin:
36.6arka planda yaklaşık olarak:
01000010000100100110011001100110gibi tutulur.
Bu yüzden bazı ondalıklı işlemlerde hata oluşabilir.
Örnek:
Kod:
float x = 0.1;
float y = 0.2;
printf("%f", x + y);
Bazen:
0.300000yerine
0.30000004gibi sonuçlar görebiliriz.
double Veri Tipi
Daha hassas ondalıklı sayılar için kullanılır.double pi = 3.141592653589793;Genellikle:
8 byteyer kaplar.
Kontrol:
printf("%zu", sizeof(double));Sonuç:
8Veri Tiplerinin Boyutları
Tipik bir 64 bit sistemde:| Veri Tipi | Boyut |
|---|---|
| char | 1 byte |
| short | 2 byte |
| int | 4 byte |
| float | 4 byte |
| long | 8 byte |
| double | 8 byte |
sizeof Operatörü
Bir değişkenin bellekte ne kadar yer kapladığını gösterir.Örnek:
Kod:
int sayi;
printf("%zu", sizeof(sayi));
Sonuç:
4signed ve unsigned
Normalde:inthem negatif hem pozitif saklar.
Örnek:
int x = -10;Ama:
unsigned int x;sadece pozitif sayı saklar.
Örnek:
Kod:
0
1
2
3
...
signed ve unsigned Neden Var?
Bellek kullanımını daha verimli yapmak için.Örneğin:
8 bitbir alanımız olsun.
signed:
-128 ile 127arası saklar.
unsigned:
0 ile 255arası saklar.
Tür Dönüşümü (Casting)
Bazen veri tipini değiştirmek isteriz.Örnek:
Kod:
float x = 10.8;
int y = (int)x;
Sonuç:
10olur.
Ondalık kısım atılır.
Otomatik Tür Dönüşümü
Örnek:
Kod:
int a = 5;
float b = 2.5;
float sonuc = a + b;
Burada:
aotomatik olarak:
5.0haline çevrilir.
Sonuç:
7.5olur.
Bellekte Gerçekten Ne Oluyor?
Örnek:
Kod:
int a = 10;
int b = 20;
RAM:
Kod:
Adres Değer
1000 10
1004 20
şeklinde olabilir.
Dikkat:
Kod:
1000
1004
arasında 4 fark vardır.
Çünkü:
int4 byte yer kaplar.
Bellek İsrafı Örneği
Kullanıcı yaşı tutacak.Maksimum:
150olsun.
Şunu yapmak mantıksızdır:
int yas = 20;Çünkü:
4 byteyer kaplar.
Bunun yerine:
unsigned char yas = 20;kullanılabilir.
Bu:
1 bytekaplar.
Büyük projelerde bu optimizasyonlar ciddi önem kazanır.
Stack Kavramına Giriş
Bir fonksiyon içinde oluşturulan değişkenler genellikle Stack bölgesine yazılır.Örnek:
Kod:
int main()
{
int a = 10;
int b = 20;
}
Çalışırken:
Kod:
STACK
---------
| b=20 |
---------
| a=10 |
---------
şeklinde saklanabilir.
Fonksiyon bittiğinde:
STACK TEMİZLENİRve değişkenler yok olur.
Bu konu ileride Pointer ve Bellek Yönetimi bölümünde çok daha kritik hale gelecek.
Bölüm Özeti
Bu bölümde:öğrendik.
Bir sonraki seride Operatörler ve Bilgisayarın Matematiksel İşlemleri Nasıl Gerçekleştirdiği konusuna geçeceğiz. Orada sadece
+ - * / değil, mantıksal operatörler, bit düzeyinde işlemler ve programlama mantığının temel karar mekanizmalarını detaylı şekilde inceleyeceğiz.