BG MVC Model View Controller eğitim serisi yayında...

Ana sayfa > Programlama > C Programlama > Sayı sistemleri

Sayı sistemleri

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

  • Onlu (Decimal) sayı sistemi
  • İkili (Binary) sayı sistemi
  • Sekizli (Octal) sayı sistemi
  • Onaltılı (Hexadecimal) sayı sistemi

Sayı sistemlerini ifade eden değerler, söz konusu 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ş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ı (bg-orangecu 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:

Ş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 etmek için kullanıldığında ise 0 - 127 arası (128 adet) değer alır.

* İşaret bit'i 1 ise sayı negatif, 0 ise sayı pozitiftir.

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:

Negatif bir sayıyı pozitif bir sayıya çevirmek için:

-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 bir sayıya ç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.

Klavyeden girilecek int değerleri ikili sayı sisteminde ekrana yazdırmak için aşağıdaki programı kullanabiliriz:


#include <stdio.h>

void IntToBin(int val);

int main(void)
{
  int id;

  printf("İkili sayı sisteminde gösterilecek int bir değer giriniz: ");
  scanf("%d", &id);

  IntToBin(id);

  return 0;
}

void IntToBin(int val)
{
  char cdizi[100];
  int bitsayi = sizeof(val) * 8;
  unsigned int u = *(unsigned int*)&val;
  unsigned int mask = 1 << (bitsayi-1);
  int id;

  for (id=0; id<bitsayi; id++, mask >>= 1) {
      cdizi[id] = (u & mask) ? '1' : '0';
  }
  cdizi[id] = '\0';
  printf("%d: %s\n", val, cdizi);
}

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ı (bg-orangecu 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ı (bg-orangecu 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

Onluk sayı sistemindeki bir sayıyı ikili sayı sistemine çevirme

Onluk sayı sistemindeki 217 sayısını ikili sayı sistemine çevirme işlemini gösteren şema aşağıdadır:

Hesaplama tablosu

Aşağıdaki tabloda değer sütununda herhangi bir sayı sisteminde girilen sayı diğer sayı sistemlerine göre çevrilerek yazılmaktadır. Sayılar ikili sayı sistemine göre 32 bit ile sınırlıdır.

Sayı sistemi Değer