Tabanlarına göre sayı sistemleri vardır.En çok kullandığımız sayı sistemleri: ikili (binary), sekizlik (octal), onluk (decimal), onaltılık (hexadecimal)’tır.Kısaca bu sayı sistemlerine değinelim.
Onluk Sayı Sistemi: Günlük yaşantımızda en çok kullandığımız sayı sistemidir. 0,1,2,3,4,5,6,7,8,9 rakamlarından oluşur. Sayısal bir örnek verelim. 321 = 3 . 10² + 2. 10¹ + 1. 10º
İkili Sayı Sistemi: Bu sayı sistemi sayısal elektronik sistemlerde kullanılır. Bilgisayarımız bu tanım için en uygun örneklerden bir tanesi. Bu sistemde kullanılan rakamlar 1 ve 0 olmak üzere iki tanedir.İkili sayı sistemini onluk sisteme çevirmek için bu işlemi gerçekleştirmemiz yeterli.
101 = 1 . 2² + 0. 2¹ + 1. 2º = 4 + 0 + 1=5
Peki onluk sayı sistemini nasıl ikili sayı sistemine çevirebiliriz? Çevirmek istediğimiz sayıyı “bölüm” ikiden küçük olana kadar 2′ye böleriz. İkiden küçük olan bölüm ile başlayarak sırayla sondan başa doğru kalanları yazarız ve elde ettiğimiz bir ve sıfırlarla oluşmuş sayı binary karşılığıdır. Örnek olarak 28 sayısını ele alalım ;
28 /2 = 14 kalan : 0 14 /2 = 7 kalan : 0 7 /2 = 3 kalan : 1 3 /2= 1 kalan : 1 Sonuç: “11100″
Sekizli Sayı Sistemi: Sayısal elektronik sistemlerinin ses ve müzik uygulamalarında yaygın olarak kullanılır. 0,1,2,3,4,5,6,7 rakamlarından oluşmuştur. Müzikte kullanılan sembollere karşılık gelmek üzere kullanılırlar. Do,re,mi,fa,sol,la,si,do. Sekizli sayı sistemini onluk sisteme çevirmek için bir örnek verelim.
321 = 3. 8² + 2. 8¹ + 1. 8º
Peki sekizli sayı sistemini nasıl ikili sayı sistemine çevirebiliriz? Onluk sayı sisteminde kullandığımız mantığı kullanarak işlemimizi gerçekleştiririz. İkiye bölerek…
Peki onluk sayı sistemini nasıl sekizli sayı sistemine çevirebiliriz?
Onluk sayı sisteminde kullandığımız mantığı kullanarak işlemimizi gerçekleştiririz. Bu kısımda dikkat edeceğimiz husus sayılarımızı sekize bölmektir.79 sayısını örnek verecek olursak.
79 / 8 = 9 kalan : 7 9 / 8 = 1 kalan : 1 Sonuç: 117
Onaltılı Sayı Sistemi: Hexadecimal sayı sisteminin tabanı 16′dır. Onluk tabandaki rakamlar ve harfler ile ifade edilir. 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F sayılarını ve harflerini kullanır. A=10, B=11, C=12, D=13, E=14, F=15 ‘dir.
Onaltılı sistemden onlu sisteme çevirme işlemi yine aynı mantık üzerine kurulmuştur.Örnek verelim.
F28= 15 . 16² + 2. 16¹ + 8. 16º
Sonuç: Sonucumuz biraz büyük olduğu için hesaplamaya üşendik. Sayı sistemlerini çevirme işlemi hep aynı mantık üzerine kurulmuştur.Bize düşen gerekli haneyi gerekli yere yazmak ve hesaplamak.Kolay gelsin!
DAHA AYRINTILISINA GİRİLİRSE....
Günlük hayatta 10'luk sayı sistemini kullanıyoruz. 10 luk sistemde bir sayının değeri aslında her bir basamak değerinin 10 sayısının ilgili kuvvetiyle çarpımlarının toplanmasıyla elde edilir.
Ancak bilgisayar sistemlerinde bütün bilgiler ikilik sistemde(binary system) ifade edilir. Genel olarak sayı sistemi kaçlıksa o sayı sisteminde o kadar sembol bulunur. Örneğin 10'luk sistemde 10 adet sembol vardır ve bu semboller 0, 1, 2, 3, 4, 5, 6, 7, 8, 9'dur. Aynı şekilde ikilik sayı sisteminde yalnızca iki adet sembol bulunur. Yani yalnızca 0 ve 1.
Bir sayıyı başka bir sayı sisteminde ifade etmek o sayının değerini değiştirmez. Yalnızca sayının gösteriliş biçimi değişir. Örneğin onluk sayı sisteminde sayısal değeri 32 olan büyüklüğü çeşitli farklı sayı sistemlerinde farklı biçimlerde gösterebiliriz ama sayının büyüklüğünü değiştirmiş olmayız.
İkilik sistemde her bir basamağa 1 bit denir. Bit kelimesi binary digit sözcüklerinden türetilmiştir.
Örneğin 1011 sayısı 4 bittir. (Ya da 4 bit uzunluğundadır).
11011001 sayısı 8 bittir. 8 bitlik bir büyüklük bir byte olarak isimlendirilir.
1 kilobyte 1K = 1024 byte dır. (yani 210 byte) 1 mega byte 1 MB = 1024 Kilo byte dır. (yani 220 byte) 1 gigabyte 1 GB = 1024 MB dır. (yani 230 byte) 1 terabyte 1 TB = 1024 GB dır. (yani 240 byte) 1 petabyte 1PB = 1024 TB dır. (yani 250 byte) 1 exabyte 1EB = 1024 PB dır. (yani 260 byte) 1 zettabyte 1ZB = 1024 EB dir.( yani 270 byte) 1 yottabyte 1YB = 1024 ZB dır.( yani 280 byte)
Kilo büyüklük olarak 1000 kat anlamına gelmektedir, ancak bilgisayar alanında Kilo 2'nin 1000'e en yakın kuvveti olan 210 yani 1024 kat olarak kullanılır.
4 bit 1 Nybble (Nibble şeklinde de yazılır) 8 bit 1 byte 16 bit 1 word 32 bit 1 double word 64 bit 1 quadro word
olarak da isimlendirilmektedir.
ikilik sisteme ilişkin genel işlemler
i. İkilik sistemdeki bir sayının 10 luk sistemde ifade edilmesi: ikilik sayı sisteminde ifade edilen bir sayının 10'luk sistemdeki karşılığını hesaplamak için en sağdan başlayarak bütün basamakları tek tek 2'nin artan kuvvetleriyle çarpılır. Örneğin :
Bu arada sık kullanılan iki terimi de açı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 bite en yüksek anlamlı bit (most significant digit) diyeceğiz ve bu bit için bundan sonra MSD kısaltmasını kullanacağız. İkilik sayı sisteminde yazılan bir sayının en sağındaki bit, yine yukarıdaki örnekten de görüldüğü gibi en düşük sayı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 bir sayının belirli bir basamağından (bitinden) söz ettiğimizde, hangi bitten söz edildiğinin doğru bir şekilde anlaşılması için basamaklar numaralandırılır. 8 bitlik bir sayı için, sayının en sağındaki bit (yani (LSD) sayının 0. bitidir. Sayının en solundaki bit (yani MSD) sayının 7. bitidir.
ii. 10'luk sistemdeki bir sayının 2'lik sistemde ifadesi :
Sayı sürekli olarak 2 ye bölünür. Her bölümden kalan değer( yani 1 ya da 0) oluşturulacak sayının 0. bitinden başlayarak, basamaklarını oluşturacaktır. Bu işleme 0 sayısı elde edilinceye kadar devam edilir. Örnek: 87 sayısını ikilik sayı sisteminde ifade 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 sistemde ifade 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 0 sayısı elde edilene kadar devam edilir. Örnek: Yine 87 sayısını ikilik sayı sisteminde ifade etmek isteyelim: 87'den çıkarılabilecek, yani 87'den bü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 kuvvetini bulalım. Bu say1 16'dır. Yani 24 'dür. O zaman sayımızın 4. biti de 1 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 bitiyle doldurarak sayımızı ikilik sistemde ifade edelim:
87 = 0101 0111
iii. İkilik sistemde ifade edilen bir sayının 1'e tümleyeni. Sayının tüm bitlerinin tersinin alınmasıyla elde edilir. Yani sayı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 yine kendisidir.
iv. İkilik sistemde ifade edilen bir sayının 2'ye tümleyeninin bulunması:
Önce sayının 1'e tümleyeni yukarıdaki gibi bulunur. Daha sonra elde edilen sayıya 1 eklenirse sayının 2'ye tümleyeni bulunmuş 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 1 dahil) sayının aynısı yazılır, daha sonraki tüm basamaklar için basamağın tersi yazılır. (Yani 1 için 0 ve 0 için 1) Örneğin :
1110 0100 sayısının ikiye tümleyeni 0001 1100 dır. 0101 1000 sayısının ikiye tümleyeni 1010 1000 dır.
Bir sayının ikiye tümleyeninin ikiye tümleyeni sayının kendisidir. (Deneyiniz)
8 bitlik bir alana yazılacak en büyük tam sayı kaçtır? 1111 1111 = 255 dir. (1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 = 255)
8 bitlik bir alana yazılacak en küçük tam sayı kaçtır? 0000 0000 = 0'dır.
Negatif bir tamsayı ikilik sistemde nasıl gösterilir?
Negatif tamsayıların da ifade edildiği ikilik sayı sistemine işaretli ikilik sayı sistemi (signed binary system) denir. İşaretli ikilik sayı siteminde, negatif sayıları göstermek için hemen hemen tüm bilgisayar sistemlerinde aşağıdaki yol izlenir:
Sayının en yüksek anlamlı biti işaret biti (sign bit) olarak kabul edilir. Ve bu bit 1 ise sayı negatif, bu bit 0 ise sayı pozitif olarak değerlendirilir. İkilik sistemde bir negatif sayı aynı değerdeki pozitif sayının ikiye tümleyenidir. Örnek olarak, ikilik sistemde yazacağımız –27 sayısı yine ikilik sistemde yazılan 27 sayısının ikiye tümleyenidir.
Pozitif olan sayıların değerini tıpkı işaretsiz sayı sisteminde olduğu gibi elde ederiz:
0001 1110 işaretli sistemde pozitif bir sayıdır. (Decimal olarak 29 sayısına eşittir.)
Ancak negatif olan sayıların değerini ancak bir dönüşümle elde edebiliriz:
1001 1101 işaretli sistemde negatif bir sayıdır. (Çünkü işaret biti 1)
2lik sistemde ifade edilen negatif bir sayı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ğunu hesaplamak için ilk önce sayının 2'ye tümleyeni bulunur. Ve bu sayının hangi pozitif sayıya karşılık geldiğini hesap edilir. Elde etmek istenen sayı, bulunan pozitif sayı ile aynı değerdeki negatif sayı olacaktır.
Örneğin 1001 1101 sayısının 10'luk sistemde hangi sayıya karşılık geldiği bulunmak istenirse:
Sayının en soldaki biti 1 olduğuna göre bu sayı negatif bir sayı olacaktır. Hangi negatif sayı olduğunu bulmak için sayının 2'ye tümleyenini alınır.
1001 1101 sayısının ikiye tümleyeni 0110 0011 sayısıdır.
Bu sayı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)
ilk yazılan sayının -99 olduğu anlaşılmış olur.
10'luk sistemde ifade edilen negatif sayıların işaretli ikilik sistemde yazılması :
Önce sayının aynı değerli fakat pozitif olanı ikilik sistemde ifade edilir : Daha sonra yazılan sayının ikiye tümleyenini alınarak, yazmak istenilen sayı elde edilir.
Örnek : İkilik sistemde –17 yazmak istenirse;
önce 17 yazılır. 0001 0001 bu sayı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 birbirlerinin ikiye tümleyenleridir. İkilik sistemde gösterilmiş olsa da aynı sayının negatifiyle pozitifinin toplamı 0 değerini verecektir. (Deneyiniz!)
Bir byte'lık (8 bitlik) bir alana yazabileceğ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 1 byte'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 hale getirmek için diğer bütün bit değerleri 1 olacak, bu sayı 0111 1111 sayısıdır. Bu sayıyı desimal sisteme 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?
0111 1111 sayısının ikiye tümleyenini alındığında –127 sayısını elde edilir. 1000 0001 (127) Bu sayıdan hala 1 çıkartabilir. 1000 0000 (-128) 1 byte alana yazılabilecek en küçük negatif sayıdır.
Burada dikkat edilmesi gereken iki önemli nokta vardır :
1 byte alana yazılabilecek en büyük sayı sınırı aşıldığında negatif bölgeye geçilir. 0111 1111 (en büyük pozitif tamsayı) 1 (1 toplarsak) 1000 0000 (-128 yani en küçük tamsayı) yani 1 byte alana yazılabilecek en büyük tamsayıya 1 eklendiğinde 1 byte alana yazılabilecek en küçük tamsayıyı elde ederiz. 1 byte alana yazılabilecek en küçük tamsayı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 -1 sayısının işaretli ikilik sayı sisteminde 8 bitlik bir alanda aşağıdaki şekilde ifade edilecektir.
-1 = 1111 1111
Yani işaretli ikilik sayı sisteminde tüm bitleri 1 olan sayı -1'dir. İleride bu sayıyla çok işimiz olacak!
16'lık sayı sistemi (hexadecimal numbering 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ın ifade edilmesi hem çok uzun hem de zahmetli. Bu yüzden, yazım ve algılama kolaylığı sağlamak için 16'lık ve 8'lik sayı sistemleri de kullanılmaktadır. 16'lık ve 8'lik sayı sistemlerinde sayılar daha yoğun olarak kodlanıp kullanabilir.
Başta da söz edildiği gibi 10 luk sistemde 10, 2'lik sistemde ise 2 sembol bulunmaktadır. Bu durumda 16'lık sayı sisteminde de 16 sembol bulunur.
ilk 10 sembol 10'luk sistemde kullanılan sembollerle tamamen aynıdır : 1, 2, 3, 4, 5, 6, 7, 8, 9,
Daha sonraki semboller
A = 10 B = 11 C = 12 D = 13 E = 14 F = 15
16'lık sayı sisteminde yazılmış bir sayıyı 10'luk sisteme çevirmek için, en sağdan başlayarak basamak değerleri 16'nın artan kuvvetleriyle çarpılır :
10'luk sistemde yazılmış bir sayıyı 16'lık sisteme çevirmek için 10 luk sistemden 2'lik sisteme yapılan dönüşümlerdekine benzer şekilde sayı sürekli 16 ya bölünerek, kalanlar soldan sağa doğru yazılır.
Pratikte 16 lık sayı sistemlerinin getirdiği önemli bir avantaj vardır. Bu avantaj 16 lık sayı sistemi ile 2'lik sayı sistemi arasındaki dönüşümlerin kolay bir şekilde yapılmasıdır.
16'lık sistemdeki 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 olarak gösterildiğini anlatır yani sayıya ilişkin bir sembol değildir) 16'lık sistemde ifadesi :
2 = 0010 A = 1010 D = 1101 F = 1111
Bu durumda 2ADFH = 0010 1010 1101 1111
2'lik sistemden 16'lık sisteme yapılacak dönüşümler de benzer şekilde yapılabilir : Önce sayıları sağdan başlayarak dörder dörder ayırırız (en son dört eksik kalırsa sıfır ile tamamlarız.) Sonra her bir dörtlük grup için doğrudan 16'lık sayı sistemindeki karşılığını yazarız.
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)
16 bitlik bir alanda ve işaretli sayı sisteminde -1 sayısını nasıl ifade edebiliriz : Cevap : FFFF
8'lik sayı sistemi (octal numbering system)
Daha az kullanılan bir sayı sistemidir.
8 adet sembol vardır. (0 1 2 3 4 5 6 7) 8'lik sayı 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'lik sayı sisteminin de kullanılma nedeni, 2'lik sayı sistemine göre daha yogun bir ifade tarzı olması, ve ikilik sayı sistemiyle, 8'lik sayı sistemi arasında yapılacak dönüşümlerin çok kolay bir biçimde yapılabilmesidir.
GERÇEK SAYILARIN BELLEKTE TUTULMASI
Sistemlerin çoğu gerçek sayıları IEEE 754 standardına göre tutarlar. (Institute of Electrical and Electronics Engineers) Bu standarda göre gerçek sayılar için iki ayrı format belirlenmiştir:
single precision format (tek hassasiyetli gerçek sayı formatı)
Bu formatta gerçek sayı 32 bit (8 byte) ile ifade edilir. 32 bit üç ayrı kısma ayrılmıştır.
1. İşaret biti (sign bit) (1 bit) Aşağıda S harfi ile gösterilmiştir. İşaret biti 1 ise sayı negatif, işaret biti 0 ise sayı pozitiftir.
2. Üstel kısım (exponent) (8 bit) Aşağıda E harfleriyle gösterilmiştir.
3. Ondalık kısım (fraction) (23 bit) Aşağıda F harfleriyle gösterilmiştir.
S EEEEEEEE FFFFFFFFFFFFFFFFFFFFFFF 31 30-----------23 22-------------------------------------0
Aşağıdaki formüle göre sayının değeri hesaplanabilir :
V sayı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 :
0 11111111 00001000000100000000000 = Sayı değil 1 11111111 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şına 1. eklenir. Daha sonra bu sayı 2(E-127) ile çarpılarak noktanın yeri ayarlanır. Noktadan sonraki kısım 2'nin artan negatif kuvvetleriyle çarpılarak elde edilecektir. Örnekler :
0 00000000 00000000000000000000001 = +1 * 2-126 0. 00000000000000000000001 = 2-149 (en küçük pozitif değer)
E = 0 ve F = 0 ve S = 1 ise V = -0
E = 0 ve F = 0 ve S = 0 ise V = 0
double precision format (çift hassasiyetli gerçek sayı formatı)
Bu formatta gerçek sayı 64 bit (8 byte) ile ifade edilir. 64 bit üç ayrı kısıma ayrılmıştır.
1. İşaret biti (sign bit) (1 bit) Aşağıda S harfi ile gösterilmiştir. İşaret biti 1 ise sayı negatif, işaret biti 0 ise sayı pozitiftir.
2. Üstel kısım (exponent) (11 bit) Aşağıda E harfleriyle gösterilmiştir.
3. Ondalık kısım (fraction) (52 bit) Aşağıda F harfleriyle gösterilmiştir.
S EEEEEEEEEEE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 63 62------------------52 51-----------------------------------------------------------------------------0
Aşağıdaki formüle göre sayının değeri hesaplanabilir :
Aşağıdaki formüle göre sayının değeri hesaplanabilir :
V sayı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şına 1. eklenir. Daha sonra bu sayı 2(E-1023) ile çarpılarak noktanın yeri ayarlanır. Noktadan sonraki kısım 2'nin artan negatif kuvvetleriyle çarpılarak elde edilecektir.