C Programlama

Ek Bilgiler

Sayı Sistemleri

Bilgisayar ve bilgisayar programlama dillerinde dört farklı sayı sistemi kullanılmaktadır:

İkili (Binary) Sayı Sistemi

Sekizli (Octal) Sayı Sistemi

Onlu (Decimal) Sayı Sistemi
	 
Onaltılı (Hexadecimal) Sayı Sistemi 

Sayı sistemlerini ifade eden değerler, sözkonusu sayı sisteminde kullanılan rakam sayısını göstermektedir. Örneğin sekizli sayısı sistemi, bu sistemde 8 adet rakam kullanıldığını ifade etmektedir.

Sayı sistemlerinde kullanılan rakamlar aşğıda gösterilmektedir:

İkili (Binary) Sayı Sistemi          :  0  1

Sekizli (Octal) Sayı Sistemi         :  0  1  2  3  4  5  6  7

Onlu (Decimal) Sayı Sistemi          :  0  1  2  3  4  5  6  7  8  9 

Onaltılı (Hexadecimal) Sayı Sistemi  :  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F 

* Hangi sayı sistemi olursa olsun, elimizdeki sayının onlu sayı sistemine göre değerini hesaplamak için, her basamakta yer alan rakamın, sayı sisteminin rakam sayısı üzeri rakamın bulunduğu basamak sırası ile çarpımlarıyla elde edilen değerlerin toplamı alınır.

* 0 sayısı da dahil olmak üzere bütün sayıların 0'ncı üssü 1'e eşittir.

Onlu Sayı Sistemi

Günlük hayatımızda en çok kullandığımız sayı sistemi olup, bütün işlemler aşağıda gösterilen 10 adet rakam ile gerçekleştirilir:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9

Onlu sayı sisteminde rakamlarla gösterilen bir sayının elde edilişini 4753 sayısı üzerinden incelemeye çalışalım:

4 . 10 3 + 7 . 10 2 + 5 . 10 1 + 3 . 10 0 = 4. 1000 + 7. 100 + 5. 10 + 3. 1

=  4000 + 700 + 50 + 3  =  4753  

Her basamakta yer alan rakam 10 (mavi renkle gösterilen) sayısının katları (turuncu renkle gösterilen değerde) ile çarpılır. En sağda yer alan 10 sayısının katı 0 ile başlar ve sol tarafa doğru birer birer artar. Elde edilen değerler toplanarak sayı elde edillir.

İkili Sayı Sistemi

Bilgisayarlar elektronik devrelerden oluştuğundan ikili (binary) sayı sistemini kullanırlar. Bütün işlemler aşağıda gösterilen 2 adet rakam ile gerçekleştirilir:

0, 1

Bu rakamlar elektronik devrelerde 0 için yalnış 1 için doğru anlamına gelir.

* Bir ikili sistem sayısında her bir rakama "bit" adı verilir.

* 4 bit'den oluşan sayılara "nibble" adı verilir.

* 8 bit'den oluşan sayılara "byte" adı verilir.

* 2 byte'den oluşan sayılara "word" adı verilir (16 bit).

* 2 word'den oluşan sayılara "double word" adı verilir (32 bit).

* Bir sayının en sağında yer alan bit'e "alçak bit" (Low bit) adı verilir.

* Bir sayının en solunda yer alan bit'e "yüksek bit"(İşaret biti) (High bit) adı verilir.

11011001 ikili sistem sayısının onlu sayı sisteminde 217 olan karşılığının elde edilmesini incelemeye çalışalım:

1 1 0 1 1 0 0 1  =  1 . 2 7 + 1 . 2 6 + 0 . 2 5 + 1 . 2 3 + 0 . 2 2 + 0 . 2 1 + 1 . 2 0 

= 1. 128 + 1. 64 + 0. 32 + 1. 16 + 1. 8 + 0. 4 + 0. 2 + 1. 1

= 128 + 64 + 0 + 16 + 8 + 0 + 0 + 1 

= 217  

Şimdi ikili sistem sayılarında sayının - ya da + değeri alma durumunu incelemeye çalışalım:

* İkili sayı sisteminde en solda yer alan bit (yüksek bit) sayının işaret bit'i olarak
  kullanılır.

* Örneğin aşağıda gösterildiği gibi işaretsiz 8 bit'lik bir sayıda elde edilebilecek
azami sayı 255 iken işaret bit'inin sağladığı değer olan 128 devre dışı kaldığından,
işaretli sayıda elde edilebilecek azami değer 127 sayısıdır.

27  +  26  +  25  +  24  +  23  +  22  +  21 +  20

128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255 (İşareti olmayan sayılar için azami değer)

0 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 127 (İşareti olan sayılar için azami değer)

* İkili sayı sisteminde bir byte (8 bit'lik)'lık sayılar pozitif sayıları ifade etmek
için kullanıldığında 0 - 255 arası (256 adet), negatif sayıları ifade etmekiçin 
kullanıldığında ise 0 - 127 arası (128 adet) değer alır.

* Eğer işaret bit'i 1 ise sayı negatif, 0 ise sayı pozitifdir.

1 0 0 0 0 0 0 0  =  -127  =  128
0 1 1 1 1 1 1 1  =   127

Eğer işaret bit'i 0 ise zaten sayının negatif olma durumu söz konusu değildir. Sayı 0 - 127 arasında pozitif bir değer alır.

İşin ilginç yanı işaret bit'i 1 değeri aldığında başlar. Artık o sayı hem pozitif hem de negatif bir değer olabilir. Yukarıda görüldüğü gibi, -127 ve 128 sayıları ikili sayı sisteminde aynı değerlerle ifade edilmektedir. Örnek üzerinde incelemeye çalışalım:

* 21 sayısını ele alalım:

  -21 ve bu sayıyla aynı şekilde ifade edilen pozitif sayıyı bulmak için aşağıdaki
  yöntemi kullanabiliriz:
  
  sayı + tamlayan sayı = 8 bit ile elde edilebilecek azami sayı miktarı
  
  21   + 235           = 256
  
  Burada -21 ve 235 sayılarını ikili sayı sisteminde aynı şekilde ifade edebileceğimizi
  buluyoruz:
  
  1 1 1 0 1 0 1 1  =  -21  =  235

İkili sayı sisteminde negatif ve pozitif sayıları birbirine çevirmek için önce sayının bütün basamakları tersine çevrilir (0 ise 1, 1 ise 0 yapılır), sonra elde edilen değere 1 eklenir. Yine -21 sayısı üzerinde bu işlemi gerçekleştirerek kuralı incelemeye çalışalım:

  -21 = 1 1 1 0 1 0 1 1
  
  Tüm basamakların ters çevrilmiş hali :  0 0 0 1 0 1 0 0 
  
  1 eklenmiş hali                      :  0 0 0 1 0 1 0 1  =  16 + 4 + 1 = 21
  
* Tekrar negatif değere çevirmek için:  

  21 = 0 0 0 1 0 1 0 1
  
  Tüm basamakların ters çevrilmiş hali :  1 1 1 0 1 0 1 0 
  
  1 eklenmiş hali                      :  1 1 1 0 1 0 1 1   =  128 + 64 + 32 + 8 + 2 + 1 
                                                            =  235 = -21 
* Bahsi geçen kuralları sadece 8 bit'lik sayılar üzerinde uyguladık. Aynı kurallar
16 ve 32 bit'lik sayılar içinde geçerlidir.

Sekizli Sayı Sistemi

Bu sayı sisteminde aşağıda gösterilen 8 adet rakam ile gerçekleştirilir:

0, 1, 2, 3, 4, 5, 6, 7

Sekizli sayı sistemindeki 4753 sayısının onlu sayı sistemine çevrilişini örnek üzerinden incelemeye çalışalım:

4753  =  4 . 83  +  7 . 82  +   5 . 81  +  3 . 80
      
      =  4 . 512  +  7 . 64  +   5 . 8  +  3 . 1

      =  2048 + 448 + 40 + 3  =  2539

Her basamakta yer alan rakam 8 (mavi renkle gösterilen) sayısının katları (turuncu renkle gösterilen değerde) ile çarpılır. En sağda yer alan 8 sayısının katı 0 ile başlar ve sol tarafa doğru birer birer artar. Elde edilen değerler toplanarak sayı elde edillir.

Onaltılı Sayı Sistemi

Bu sayı sisteminde aşağıda gösterilen 16 adet ifade kullanılır. Diğer sayı sistemlerinden farkı rakamların yanısıra harf kullanılmasıdır. Bilgisayarda ikili sistem sayılarının daha pratik ve kısa bir şekilde kullanılması için tercih edilir:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F

Sayı Sistemi

Onlu       0    1    2    3    4    5    6    7    8    9    10   11   12   13   14   15   

Onaltılı   0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F

İkili     0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111

Onaltılı sayı sistemindeki 1AD4 sayısının onlu sayı sistemine çevrilişini örnek üzerinden incelemeye çalışalım:

1AD4  =  1 . 163  +  A . 162  +   D . 161  +  4 . 160   

      =  1 . 4096  +  A . 256  +   D . 16  +  4 . 1

      =  1 . 4096  +  10 . 256  +  13 . 16  +  4 . 1
	  
      =  4096 + 2560 + 208 + 4  =  6868

Her basamakta yer alan rakam 16 (mavi renkle gösterilen) sayısının katları (turuncu renkle gösterilen değerde) ile çarpılır. En sağda yer alan 16 sayısının katı 0 ile başlar ve sol tarafa doğru birer birer artar. Elde edilen değerler toplanarak sayı elde edillir.

Yukarıdaki tablodan da görülebileceği gibi onaltılık sayı sisteminde yer alan rakamlar ikili sayı sistemine göre 4 bit ile gösterildiğinden, bu iki sayı sistemi rasında sayıları birbirine çevirmek oldukça pratiktir. Bir örnek üzerinde incelemeye çalışalım:

1    A    D    4           (Onaltılık sayı sisteminde)

0001 1010 1011 0100        (İkilik sayı sisteminde)

Onlu Sayı Sistemindeki Bir Sayıyı Diğer Sayı Sistemlerinden Birine Çevirme

Onlu sayı sistemindeki bir sayıyı diğer sayı sistemlerinden birine çevirmek için, elimizdeki sayıyı çevirmek istediğimiz sayı sisteminin taban değerine, işlem sonrası elde ettiğimiz sonuçları, sonuç 0 olana kadar böleriz. Bölme işlemleri sonrasında elde edilen kalan değerleri ters olarak dizildiğinde elimizdeki onlu sistem sayısı söz konusu sayı sistemine çevrilmiş olur.

Şimdi, 1754 onlu sistem sayısını onaltılı sayı sistemineki çevirmeye çalışalım:

Sayı            Sonuç           Kalan                 Elde edilen sayı

1754 / 16        109              10    ---->  A

 109 / 16          6              13    ---->  D            6DA

   6 / 16          0               6    ---->  6