da 1 4 100'ler basamağında 5 * 10'- lar basamağında 0 4 1'ler basama- ğında 4” bulunduğunu düşündüğü- müz gibi 1101 ikilik sayısını “8”'ler basamağında | * 4'ler basamağın- da | * 2'ler basamağında O * |'ler basamağında 1” şeklinde görebiliriz. Hesaplama (1*8 * 1*4 4 0*2 4 1*1) ondalık karşılık olarak 13 sayı- sını verecektir. Şimdiye kadar tamsayılarla uğraş- tık. Bir de kesirler var. 0.5 ondalık kesrini ikilik sayı olarak nasıl göste- rebiliriz? Çok basit, on'lu tabanda 0.5 — iki'li tabanda 0.1'dir. Yine herşey basamak değerlerine dayanı- yor. On'lu tabanda ondalık noktanın sağındaki ilk basamak 10'da birleri (1/10), ikinci basamak yüz'de birle- ri vb. temsil eder. İkilik sistemde, iki- lik noktanın (diğer ismi radix nokta- s1) sağındaki ilk basamak yarımları (1/2), sonraki basamak dörtte birle- ri, sonraki sekizde birleri, sonra da onaltıda birleri vb. temsil ediyor. Böylece 0.1101 ikilik kesri şu şekil- de açıklanabilir: O.1101— 1*(1/2) — 0*(1/8) * 1*(1/16) — 05 * 0.25 * Ü 4 0.0625 — 0.5125 ondalık İkilik bir kesrin ondalık karşılığı- nı bulmanın başka bir yolu daha var. Örneğin 0.058 ondalık kesrini “bin- de 58” olarak okuduğumuz gibi O.1101 ikilik kesrini “onaltıda 13* şeklinde okuyabiliriz, çünkü 1101 13'e eşittir ve 0.1101'in en sağındaki basamak onaltıda birler basamağıdır. Eğer 13/16'yı bölerek ondalık sayı- ya çevirirsek önceki sonuç olan 0.8125'i elde ederiz. Bilgisayar yalnızca ikilik yapıda değil, aynı zamanda bayt yapılıdır. Bir bayt 8 ikilik basamaktan oluşan bir gruptur. İkilik kesirler bilgisayar- da en kolay biçimde bayt düzeninde saklanırlar. Örnek olarak 0.1101001 ikilik kesrini düşünelim. Yine bunu bit'lerine göre ondalığa çevirebiliriz. 1*4(1/4) 4 0.11010001, — 1*(1/2) * 1*(1/4) * * 1*4(1/16) * 8*(1/32) * 0*(1/64) * 0*(1/128) —4 — 1*(1/256) — 0.81640625 Diğer metodu kullanacak olursak önce ondalık karşılığı 209 olan tam- sayı ikilik kısmı (11010001) alıp bu- nu 256'ya böleriz (çünkü baştaki ikili kesrin en sağındaki bit 256'da birler basamağındadır). 209/256 işlemi- nin sonucu yine yukarıdaki gibi 56 0.81640625 olacaktır. 0.11010001, — 11010001,/256 — 209/ 256 —>0.81640625 209 sayısı, bayt'ın en solunda- ki bit'in değeri 128 olduğundan 11010001'in 1*128 4 1*64 4 0*32 * 1*16 4 Ö*8 4 044 4 042 4 1*1 — 209 biçiminde yazılışından ileri gelmektedir. Bütün bu yolların BASIC'teki flo- “ ating-point saklama şekliyle nasıl il- gili olduklarını görmeden önce baş- ka bir örneğe daha ihtiyacımız var. Ondalık bir kesri normalize etmenin ondalık noktayı mantis'in en önemli basamağının soluna kaydırmak de- mek olduğunu gördük. Bu hareketi üssün değerini değiştirerek denkleş- tiriyorduk. İkilik kesirleri normalize etmek için de aynı mantıkla çalışan benzer bir işlem yapılıyor. 209 ondalık sayısını düşünelim. Bu sayıyı normalize ikilik floating-point değerinde şöyle ifade edebiliriz: 1) 209'u 2'nin kuvvetinin ikilik katı olarak yazalım: 209 — 11010001 #2A0 (2A0-—1I olduğundan) — 11010001.E0 (bura- da E, “*2A ” yerinde kullanılmıştır). 2) Radix noktasını en soldaki sıfır ol- mayan bit'e (8 basamak sola) kaydı- ralım: .11010001 3) Bu kaydırma işlemini, üssü 8 art- tırarak denkleştirelim: .11010001E8 İşlemin sağlamasını yapmak için O.11010001 ikilik kesrini ala- rak 2A& ile çarpalım. Daha önceden 0.11010001,'in 0.81640625'e eşit ol- duğunu gördük ve 28'in 256 olduğu- nu biliyoruz. Öyleyse 0.81640625 * 256 — 209'dur. Alternatif olarak Ö.11010001, 209/256'dır ve 209/256 * 256—209, Bu yazımda da bir şey kaybetmiyoruz. DERİNLİKLERE DOĞRU Eğer buraya kadar olan kısmı özel- likle ikilik kesirler ve normalizasyon bölümlerini iyice anladıysanız, floating-point sayıların bilgisayar içinde nasıl saklandığına yakından bakabiliriz. Burada Floating-Point Çeviricisi programından bahsedeceğiz. Bu program, herhangi bir sayının bilgi- sayarın içinde nasıl temsil edildiğini görebilmemiz için, floating-point de- Bişkeninde bulunan bilgiyi ekranda göstermektedir. Program ayrıca bel- leğe direk olarak data değerleri gir- menize ve bilgisayarın bunları nasıl bir floating-point niceliği olarak yo- rumladığını görmenize olanak sağla- maktadır. Program, en başta ilk tanımlanan değişkenin saklandığı bellek adresine bakıyor. Bu bellek adresi “değişken- ler pointer'ının başlangıcı”” yoluyla bulunuyor. Bu pointer C-128'de 47 ve 48 adreslerinde, C64'te ise 45 ve 46 adreslerinde saklanan iki baytlık bir sayıdır (gelecek ayki C64'ün BEL- LEK HARİTASI yazı dizisinde bu adresler hakkında detaylı bilgi bula- bilirsiniz). Satır 70, hangi bilgisaya- rın kullanıldığını belirtiyor. Satır 80 ise pointer'ın başlangıç adresi için uy- gun bir değer seçiyor. Satır 90, aşağıdaki standart formü- lü kullanarak 2 bayt'lık pointer'ı bir bellek adresine dönüştürüyor: Adres — (pointer'in ilk baytı) 4 256* (pointer'in ikinci baytı) Bu adres programın ilk değişkeni- nin yerleştiği yerdir. Her değişken için 7 bayt bellek ayrılır. Floating- point değişkenlerinin saklanma düze- ni aşağıdaki gibidir: Byte Kapsam — Byte — Kapsam 1 İsim 1 5 Mant2 2 İsim2 () Mant3 3 Üs 7 Mant4 4 Mantl Her değişkenin iki karakterden oluşan bir ismi olabilir (esasında sa- dece ilk iki karakter dikkate alınır). Bu karakterler İsiml ve İsim2'de sak- lanırlar. Eğer değişkenin tek karak- terlik bir ismi varsa bu karakter İsim1'de saklanır ve İsim2 O değeri- ni alır. Kalan 5 bayt üs ve değişkenin flo-