25 Ocak 2012 Çarşamba

Sayı Sistemleri


Günlükhayatta 10’luk sayı sistemini kullanıyoruz. 10 luk sistemde bir sayının değeriaslında her bir basamak değerinin 10 sayısının ilgili kuvvetiyle çarpımlarınıntoplanmasıyla elde edilir.

Örneğin 1273 = (3 * 1) + (7 * 10 ) + (2* 100) + (1 * 1000)

Ancak bilgisayar sistemlerinde bütünbilgiler ikilik sistemde(binary system) ifade edilir.
Genel olarak sayı sistemi kaçlıksa osayı sisteminde o kadar sembol bulunur.
Örneğin 10’luk sistemde 10 adet sembolvardır ve bu semboller 0, 1, 2, 3, 4, 5, 6, 7, 8, 9’dur.
Aynı şekilde ikilik sayı sistemindeyalnızca iki adet sembol bulunur. Yani yalnızca 0 ve 1.

Bir sayıyı başka bir sayı sistemindeifade etmek o sayının değerini değiştirmez. Yalnızca sayının gösteriliş biçimideğişir. Örneğin onluk sayı sisteminde sayısal değeri 32 olan büyüklüğü çeşitlifarklı sayı sistemlerinde farklı biçimlerde gösterebiliriz ama sayınınbüyüklüğünü değiştirmiş olmayız.

İkilik sistemde her bir basamağa 1 bit denir. Bit kelimesibinarydigit sözcüklerinden türetilmiştir.

Örneğin 1011 sayısı 4 bittir. (Ya da 4bit uzunluğundadır).

11011001 sayısı 8 bittir.
8 bitlik bir büyüklük bir byte olarakisimlendirilir.

1 kilobyte 1K = 1024 byte dır. (yani 210byte)
1 mega byte 1 MB = 1024 Kilo byte dır.(yani 220 byte)
1 gigabyte 1 GB = 1024 MB dır. (yani 230byte)
1 terabyte 1 TB = 1024 GB dır. (yani 240byte)
1 petabyte 1PB = 1024 TB dır. (yani 250byte)
1 exabyte 1EB = 1024 PB dır. (yani 260byte)
1 zettabyte 1ZB = 1024 EB dir.( yani 270byte)
1 yottabyte 1YB = 1024 ZB dır.( yani 280byte)

Kilo büyüklük olarak 1000 kat anlamınagelmektedir, ancak bilgisayar alanında Kilo 2'nin 1000'e en yakın kuvveti olan210 yani 1024 kat olarak kullanılır.

4 bit     1Nybble (Nibble şeklinde de yazılır)
8 bit     1byte
16 bit    1word
32 bit    1double word
64 bit    1quadro word

olarak da isimlendirilmektedir.

ikiliksisteme ilişkin genel işlemler

i. İkilik sistemdeki bir sayının 10 luksistemde ifade edilmesi:
ikilik sayı sisteminde ifade edilen birsayının 10’luk sistemdeki karşılığını hesaplamak için en sağdan başlayarakbütün basamakları tek tek 2’nin artan kuvvetleriyle çarpılır. Örneğin :

1 0 1 1 = 1 * 20  + 1 * 21  + 0 * 22  + 1 * 23  = 11
0010 1001 = (1 * 1) + (1 * 8) + (1 *32) = 41

Bu arada sık kullanılan iki terimi deaçıklayalım. İkilik sayı sisteminde yazılan bir sayının en solundaki bit,yukarıdaki örnekten de görüldüğü gibi en yüksek sayısal değeri katıyor. Bu biteen yüksek anlamlı bit (most significant digit) diyeceğiz ve bu bit için bundansonra MSD kısaltmasını kullanacağız.
İkilik sayı sisteminde yazılan birsayının en sağındaki bit, yine yukarıdaki örnekten de görüldüğü gibi en düşüksayısal değeri katıyor. Bu bite en düşük anlamlı bit (least significant digit)diyeceğiz ve bu bit için bundan sonra LSD kısaltmasını kullanacağız.
Örnek :
0101 1101 sayısı için
MSD = 0
LSD = 1

İkilik sayı sisteminde yazılan birsayının belirli bir basamağından (bitinden) söz ettiğimizde, hangi bitten sözedildiğinin doğru bir şekilde anlaşılması için basamaklar numaralandırılır.
8 bitlik bir sayı için, sayının ensağındaki bit (yani (LSD) sayının 0. bitidir. Sayının en solundaki bit (yaniMSD) sayının 7. bitidir.

ii. 10’luk sistemdeki bir sayının 2’liksistemde ifadesi :

Sayı sürekli olarak 2 ye bölünür. Herbölümden kalan değer( yani 1 ya da 0) oluşturulacak sayının 0. bitindenbaşlayarak, basamaklarını oluşturacaktır. Bu işleme 0 sayısı elde edilinceyekadar devam edilir. Örnek:
87 sayısını ikilik sayı sistemindeifade etmek isteyelim:
87 / 2 = 43 (kalan 1) Sayının 0. biti 1
43 / 2 = 21 (kalan 1) Sayının 1. biti 1
21 / 2 = 10 (kalan 1) Sayının 2. biti 1
10 / 2 = 5 (kalan 0) Sayının 3. biti 0
5 / 2 = 2 (kalan 1) Sayının 4. biti 1
2 / 2 = 1 (kalan 0) Sayının 5. biti 0
1 / 2 = 0 (kalan 1) Sayının 6. biti 1

87 = 0101 0111

İkinci bir yöntem ise 10 luk sistemdeifade edilen sayıdan sürekli olarak 2'nin en büyük kuvvetini çıkarmaktır. 2’ninçıkarılan her bir kuvveti için ilgili basamağa 1 değeri yazılır. Bu işleme 0sayısı elde edilene kadar devam edilir. Örnek:
Yine 87 sayısını ikilik sayı sistemindeifade etmek isteyelim:
87'den çıkarılabilecek, yani 87'denbüyük olmayan ikinin en büyük kuvveti nedir? Cevap 64. O zaman 64 = 26  olduğuna göre 6.bit 1 değerini alacak.
87 - 64 = 23. Şimdi 23'dençıkarılabilecek  ikinin en büyük kuvvetinibulalım. Bu say1 16'dır. Yani 24 'dür. O zaman sayımızın 4. biti de1 olacak.
23 - 16 = 7. 7'den çıkarılabilecek  ikinin en büyük kuvveti 4'dür ve 4 = 22 'dir.Sayımızınj 2. biti de 1 olacak.
7 - 4 = 3.
3 - 2 = 1 (2 = 21 )Sayımızın 1. biti 1 olacak.
1 - 1 = 0 (1 = 20 )Sayımızın 0. biti 1 olacak.

1 değeri olmayan tüm bitleri 0 bitiyledoldurarak sayımızı ikilik sistemde ifade edelim:

87 = 0101 0111

iii. İkilik sistemde ifade edilen bir sayının 1’etümleyeni. Sayının tüm bitlerinin tersinin alınmasıyla elde edilir. Yanisayıdaki 1’ler 0 ve 0’lar 1 yapılır.
Bir sayının 1’e tümleyeninin 1’e tümleyeni sayının yinekendisidir.

iv. İkilik sistemde ifade edilen birsayının 2’ye tümleyeninin bulunması:

Önce sayının 1’e tümleyeni yukarıdakigibi bulunur. Daha sonra elde edilen sayıya 1 eklenirse sayının 2’ye tümleyenibulunmuş olur. 2'ye tümleyeni bulmak için daha daha pratik bir yol daha vardır: Sayının en solundan başlayarak ilk defa 1 biti görene kadar (ilk görülen 1dahil) sayının aynısı yazılır, daha sonraki tüm basamaklar için basamağın tersiyazılır. (Yani 1 için 0 ve 0 için 1) Örneğin :

11100100 sayısının ikiye tümleyeni  0001 1100dır.
01011000 sayısının ikiye tümleyeni  1010 1000dır.

Birsayının ikiye tümleyeninin ikiye tümleyeni sayının kendisidir. (Deneyiniz)

8bitlik bir alana yazılacak en büyük tam sayı kaçtır?
11111111 = 255 dir. (1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 = 255)

8bitlik bir alana yazılacak en küçük tam sayı kaçtır?
00000000 = 0’dır.

Negatif birtamsayı ikilik sistemde nasıl gösterilir?

Negatif tamsayıların da ifade edildiğiikilik sayı sistemine işaretli ikilik sayı sistemi (signed binary system)denir. İşaretli ikilik sayı siteminde, negatif sayıları göstermek için hemenhemen tüm bilgisayar sistemlerinde aşağıdaki yol izlenir:

Sayının en yüksek anlamlı biti işaretbiti (sign bit) olarak kabul edilir. Ve bu bit 1 ise sayı negatif, bubit 0ise sayı pozitif olarak değerlendirilir. İkilik sistemde bir negatif sayı aynıdeğerdeki pozitif sayının ikiye tümleyenidir. Örnek olarak, ikilik sistemdeyazacağımız –27 sayısı yine ikilik sistemde yazılan 27 sayısının ikiyetümleyenidir.

Pozitifolan sayıların değerini  tıpkı işaretsizsayı sisteminde olduğu gibi elde ederiz:

00011110 işaretli sistemde pozitif bir sayıdır. (Decimal olarak 29 sayısınaeşittir.)

Ancaknegatif olan sayıların değerini ancak bir dönüşümle elde edebiliriz:

10011101 işaretli sistemde negatif bir sayıdır. (Çünkü işaret biti 1)

2lik sistemde ifade edilen negatif birsayının 10’luk sistemde hangi negatif sayıya eşit olduğunu nasıl bulunur?

Sayının en yüksek anlamlı biti (MSD)işaret bitidir. Bu bit 1 ise sayı negatifdir. Sayının kaça eşit olduğunuhesaplamak için ilk önce sayının 2’ye tümleyeni bulunur. Ve bu sayının hangipozitif sayıya karşılık geldiğini hesap edilir. Elde etmek istenen sayı,  bulunan pozitif sayı ile aynı değerdekinegatif sayı olacaktır.

Örneğin1001 1101 sayısının 10’luk sistemde hangi sayıya karşılık geldiği bulunmakistenirse:

Sayının en soldaki biti 1 olduğuna görebu sayı negatif bir sayı olacaktır. Hangi negatif sayı olduğunu bulmak içinsayının 2’ye tümleyenini alınır.

10011101 sayısının ikiye tümleyeni 0110 0011 sayısıdır.

Busayının 10'luk sistemde hangi sayıya denk olduğu hesaplanırsa :
 (1 * 1 + 1 * 2 + 0 * 4 + 0 * 8 + 0 * 16 + 1 *32 + 1 * 64 = 99)

ilkyazılan sayının -99 olduğu anlaşılmış olur.

10'luksistemde ifade edilen negatif sayıların işaretli ikilik sistemde yazılması :

Öncesayının aynı değerli fakat pozitif olanı ikilik sistemde ifade edilir : Dahasonra yazılan sayının ikiye tümleyenini alınarak, yazmak istenilen sayı eldeedilir.

Örnek: İkilik sistemde –17 yazmak istenirse;

önce17 yazılır.                                                   0001 0001
busayının 2'ye tümleyeni alınırsa                       1110 1111 sayısı elde edilir.


Sayı değeri aynı olan  Negatif ve Pozitif sayılar birbirlerininikiye tümleyenleridir.
İkilik sistemde gösterilmiş olsa daaynı sayının negatifiyle pozitifinin toplamı 0 değerini verecektir.(Deneyiniz!)

Bir byte’lık (8 bitlik) bir alanayazabileceğimiz (işaret bitini dikkate almadan) en büyük sayı 255 (1111 1111)ve en küçük sayı ise 0’dır.(0000 0000). Peki işaret biti dikkate alındığında 1byte’lık alana yazılabilecek en büyük ve en küçük sayılar ne olabilir?

En büyük sayı kolayca hesaplanabilir.işaret biti 0 olacak (yani sayı pozitif olacak) ve sayı değerini en büyük halegetirmek için diğer bütün bit değerleri 1 olacak, bu sayı  0111 1111 sayısıdır. Bu sayıyı desimalsisteme dönüştürürsek 127 olduğunu görürüz. Peki ya en küçük negatif sayıkaçtır ve nasıl ifade edilir?

01111111 sayısının ikiye tümleyenini alındığında –127 sayısını elde edilir.
10000001 (127) Bu sayıdan hala 1 çıkartabilir.
10000000 (-128) 1 byte alana yazılabilecek en küçük negatif sayıdır.

Buradadikkat edilmesi gereken iki önemli nokta vardır :

1byte alana yazılabilecek en büyük sayı sınırı aşıldığında negatif bölgeyegeçilir.
01111111 (en büyük pozitif tamsayı)
             1 (1 toplarsak)
10000000 (-128 yani en küçük tamsayı)
yani 1 byte alana yazılabilecek enbüyük tamsayıya 1 eklendiğinde  1 bytealana yazılabilecek en küçük tamsayıyı elde ederiz.
1 byte alana yazılabilecek en küçüktamsayıdan 1 çıkardığımızda da 1 byte alana yazılabilecek en büyük tamsayıyıelde ederiz.

Yukarıda anlattıklarımıza göre -1sayısının işaretli ikilik sayı sisteminde 8 bitlik bir alanda aşağıdaki şekildeifade edilecektir.

-1 = 1111 1111

Yani işaretli ikilik sayı sistemindetüm bitleri 1 olan sayı -1'dir. İleride bu sayıyla çok işimiz olacak!

16’lık sayı sistemi (hexadecimalnumbering system) ve 8’lik sayı sistemi (octal system)


Bilgisayarların tamamen 2’lik sistemdeçalıştığını söylemiştik, ama yukarıda görüldüğü gibi 2’lik sistemde sayılarınifade edilmesi hem çok uzun hem de zahmetli. Bu yüzden, yazım ve algılamakolaylığı sağlamak için 16’lık ve 8’lik sayı sistemleri de kullanılmaktadır.
16'lık ve 8’lik sayı sistemlerindesayılar daha yoğun olarak kodlanıp kullanabilir.

Başta da söz edildiği gibi 10 luksistemde 10, 2’lik sistemde ise 2 sembol bulunmaktadır. Bu durumda 16’lık sayısisteminde de 16 sembol bulunur.

ilk10 sembol 10'luk sistemde kullanılan sembollerle tamamen aynıdır :
1,2, 3, 4, 5, 6, 7, 8, 9,

Dahasonraki semboller

A   = 10
B   = 11
C   = 12
D   = 13
E   = 14
F   = 15

16’lıksayı sisteminde yazılmış bir sayıyı 10’luk sisteme çevirmek için, en sağdanbaşlayarak basamak değerleri 16’nın artan kuvvetleriyle çarpılır :

01AF  = (15 * 1) + (10 * 16) + (1 * 256) + (0  *4096) = 431

10’luk sistemde yazılmış bir sayıyı16’lık sisteme çevirmek için 10 luk sistemden 2’lik sisteme yapılandönüşümlerdekine benzer şekilde sayı sürekli 16 ya bölünerek, kalanlar soldansağa doğru yazılır.

Pratikte 16 lık sayı sistemleriningetirdiği önemli bir avantaj vardır. Bu avantaj 16 lık sayı sistemi ile 2’liksayı sistemi arasındaki dönüşümlerin kolay bir şekilde yapılmasıdır.

16’lıksistemdeki her digit 2’lik sistemdeki 4 bit (1 Nibble) alan ile ifade edilebilir :

0001
1
0010
2
0011
3
0100
4
0101
5
0110
6
0111
7
1000
8
1001
9
1010
A
1011
B
1100
C
1101
D
1110
E
1111
F

Örnek : 2ADFH sayısının  (en sondaki H sayının hexadecimal olarakgösterildiğini anlatır yani sayıya ilişkin bir sembol değildir) 16'lık sistemdeifadesi :

2
=
0010
A
=
1010
D
=
1101
F
=
1111

Budurumda 2ADFH = 0010 1010 1101 1111

2’lik sistemden 16’lık sisteme yapılacakdönüşümler de benzer şekilde yapılabilir :
Önce sayıları sağdan başlayarak dörderdörder ayırırız (en son dört eksik kalırsa sıfır ile tamamlarız.) Sonra her birdörtlük grup için doğrudan 16'lık sayı sistemindeki karşılığını yazarız.

10101110 1011 0001     = AEB1H
00101101 0011 1110    = 2D3EH

soru: 16'lık sayı sisteminde 2 byte'lık bir alanda yazılmış olan 81AC  H sayısı pozitif mi negatif midir?
cevap: Sayının yüksek anlamlı biti 1 olduğu için, işaretli sayı sistemlerinde sayınegatif olarak değerlendirilecektir. (1001 0001 1010 1100)

16bitlik bir alanda ve işaretli sayı sisteminde -1 sayısını nasıl ifadeedebiliriz :
Cevap: FFFF

8’liksayı sistemi (octal numbering system)

Dahaaz kullanılan bir sayı sistemidir.

8adet sembol vardır. (0 1 2 3 4 5 6 7)
8’liksayı sisteminin her bir digiti 2’lik sistemde 3 bit ile ifade edilir.

001       1
010       2
011       3
100       4
101       5
110       6
111       7

8'liksayı sisteminin de kullanılma nedeni, 2'lik sayı sistemine göre daha yogun birifade tarzı olması, ve ikilik sayı sistemiyle, 8'lik sayı sistemi arasındayapılacak dönüşümlerin çok kolay bir biçimde yapılabilmesidir.

GERÇEK SAYILARIN BELLEKTE TUTULMASI

Sistemlerin çoğu gerçek sayıları IEEE754 standardına göre tutarlar. (Institute of Electrical and ElectronicsEngineers) Bu standarda göre gerçek sayılar için iki ayrı formatbelirlenmiştir:

singleprecision format (tek hassasiyetli gerçek sayı formatı)

Buformatta gerçek sayı 32 bit (8 byte)  ileifade edilir.
32bit üç ayrı kısma ayrılmıştır.

1.İşaret biti (sign bit)  (1 bit)
AşağıdaS harfi ile gösterilmiştir.
İşaretbiti 1 ise sayı negatif, işaret biti 0 ise sayı pozitiftir.

2.Üstel kısım (exponent) (8 bit)
AşağıdaE harfleriyle gösterilmiştir.

3.Ondalık kısım (fraction) (23 bit)
AşağıdaF harfleriyle gösterilmiştir.

S          EEEEEEEE                 FFFFFFFFFFFFFFFFFFFFFFF
31        30-----------23                 22-------------------------------------0

Aşağıdakiformüle göre sayının değeri hesaplanabilir :

Vsayının değeri olmak üzere:

E= 255 ise ve F 0 dışı bir değer ise V = NaN (Not a number) bir gerçek sayıolarak kabul edilmez. Örnek :

011111111 00001000000100000000000 = Sayıdeğil
111111111 00010101010001001010101 = Sayıdeğil


E= 255 ise ve F = 0 ise ve S = 1 ise  V =-sonsuz
E= 255 ise ve F = 0 ise ve S = 1 ise  V =+sonsuz

0< E < 255 ise

V= (-1)S * 2(E -127) * (1.F)

Önce sayının fraction kısmının başına1. eklenir. Daha sonra bu sayı 2(E-127) ile çarpılarak noktanın yeriayarlanır. Noktadan sonraki kısım 2'nin artan negatif kuvvetleriyle çarpılarakelde edilecektir. Örnekler :

010000000 00000000000000000000000 = +1 * 2 (128 - 127)  * 1.0
                                                             = 2 * 1.0
                                                             = 10.00
                                                             = 2

           

010000001 10100000000000000000000 = +1 * 2 (129 - 127)  * 1.101
                                                             = 22 * 1.101
                                                             = 110.100000
                                                             = 6.5


110000001 10100000000000000000000 = -1 * 2 (129 - 127)  * 1.101
                                                             = -22 * 1.101
                                                             = 110.100000
                                                             = -6.5

000000001 00000000000000000000000 = +1 * 2 (1 - 127)  * 1.0
                                                             = 2-126

E= 0 ve F sıfır dışı bir değer ise

V = (-1)S* 2(-126) * (0.F)

Örnekler:

000000000 10000000000000000000000 = +1 * 2-126 * 0.1
  =

000000000 00000000000000000000001 = +1 * 2-126 0.00000000000000000000001
                                                             = 2-149 (en küçük pozitif değer)

E = 0 ve F = 0ve S = 1 ise V = -0

E = 0 ve F = 0ve S = 0 ise V = 0


doubleprecision format (çift hassasiyetli gerçek sayı formatı)

Buformatta gerçek sayı 64 bit (8 byte)  ileifade edilir.
64bit üç ayrı kısıma ayrılmıştır.

1.İşaret biti (sign bit)  (1 bit)
AşağıdaS harfi ile gösterilmiştir.
İşaretbiti 1 ise sayı negatif, işaret biti 0 ise sayı pozitiftir.

2.Üstel kısım (exponent) (11 bit)
AşağıdaE harfleriyle gösterilmiştir.

3.Ondalık kısım (fraction) (52 bit)
AşağıdaF harfleriyle gösterilmiştir.

S   EEEEEEEEEEE   FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
6362------------------52 51-----------------------------------------------------------------------------0

Aşağıdakiformüle göre sayının değeri hesaplanabilir :

Aşağıdakiformüle göre sayının değeri hesaplanabilir :

Vsayının değeri olmak üzere:

E= 2047 ise ve F 0 dışı bir değer ise V = NaN (Not a number) bir gerçek sayıolarak kabul edilmez.

E= 2047 ise ve F = 0 ise ve S = 1 ise  V =-sonsuz
E= 2047 ise ve F = 0 ise ve S = 1 ise  V =+sonsuz

0< E < 2047 ise

V= (-1)S * 2(E -1023) * (1.F)

Önce sayının fraction kısmının başına1. eklenir. Daha sonra bu sayı 2(E-1023) ile çarpılarak noktanınyeri ayarlanır. Noktadan sonraki kısım 2'nin artan negatif kuvvetleriyleçarpılarak elde edilecektir.

E= 0 ve F sıfır dışı bir değer ise

V= (-1)S * 2(-126) * (0.F)

E= 0 ve F = 0 ve S = 1 ise V = -0

E= 0 ve F = 0 ve S = 0 ise V = 0

4 yorum:

  1. Çok güzel açıklamışsınız. C programlamaya yeni başladım ve hiçbir ön bilgim yoktu. Sayenizde sayı sistemlerini çok güzel anladım çok teşekkür ederim. Aklıma takılan bir diğer husus ondalıklı sayıların farklı tabanlardaki ifadeleri. Örnegin 2lik tabandaki ondalıklı bir sayının decimal sistemde ifadesi ile ilgili internette bir çok bilgi mevcut ancak decimal sistemdeki ondalik bir sayının binary sisteme dönüştürülmesiyle ilgili ne yazık ki açıklayıcı bir kaynak bulamadım.Yardımcı olmanız mümkün mü?

    YanıtlaSil
  2. singleprecision format (tek hassasiyetli gerçek sayı formatı)

    Buformatta gerçek sayı 32 bit (8 byte) ileifade edilir.
    32bit üç ayrı kısma ayrılmıştır.


    BU KISIMDA 32 BİT (8 BYTE) yazıyor 8 bit 1 byte olduğundan 32BİT(4 BYTE) yazılması lazım mı

    YanıtlaSil
  3. 00011110 sayısı 30'a eşiittir 29 değil

    YanıtlaSil
  4. 32 bit 8 byte değil 4 byte eder sanırım yanlış yazdınız. Saygılarımla

    YanıtlaSil