Yazan : Şadi Evren ŞEKER
Bu yazının amacı sayıların ondalıklı olması halinde (floating numbers, küsuratlı sayılar, real numbers, reel sayılar, gerçel sayılar) tabanlarının nasıl değiştiğini anlatmaktır. Normal sayıların taban dönüşümü için buraya tıklarayarak ilgil yazıyı okuyabilirsiniz. (number bases)
Öncelikle küsurat kısmının payda olarak değerlendirilmesi gerektiğini bilmemiz gerekir.
Normalde bir sayıyı farklı bir tabana çevirirken, sayının çevrileceği tabandaki, taban değerinin üstleri ile çarpılması beklenir.
Örneğin onluk tabandaki 13 sayını ikilik tabana çevirirsek:
1 x 101 + 3 x 100 = 1 x 23 + 1 x 22 + 0x 21 + 1 x 20
Şeklinde yazabiliriz. Yani
(13)10 = (1101)2 şeklinde yazılabilir
Diğer bir deyişle, sayılar dönüştürüldüğü tabandaki kaçıncı hane ise, o tabanın hane sayısı kadar üstü ile çarpılır.
Ondalıklı sayılar için bu durum tam tersidir. Yani üstler tabanın üstü şeklinde değil tabanın eksi üstü (veya bir bölü tabanın üstü) şeklinde düşünülmelidir.
Örneğin onluk tabandaki bir sayıyı :
0.123 = 1x 1/10 + 2x 1/100 + 3x 1/1000 şeklinde düşünebiliriz.
Benzer şekilde farklı bir tabandaki sayıyı da o tabandaki üstler olarak düşünmek gerekir:
(0.23)8 = 2 x 1/8 + 3 x 1/64
Ondalıklı sayılarda dikkat edilecek bir husus, sayının üstünün normal sayılarda olduğu gibi 0’dan değil 1’den başlamasıdır.
Sayıların anlamını yukarıdaki şekilde açıkladıktan sonra çevirme işlemine geçebiliriz. Önce basit bir iki uygulamadan başlayalım:
(13.5)10 = ( ? )2
Yukarıdaki soruda onluk tabandaki bir sayıyı ikilik tabana çevirmemiz istenmiş. Çevirme işlemini tam sayı ve küsuratı olarak iki aşamada yapabiliriz. Önce tam kısım olan 13’ü çevirelim :
(13)10 = (1101)2 şimdi küsuratı çevirelim:
0.5 = ½ = (0.1)2
Sayının 0.1 olmasının sebebi ikilik tabandaki ilk kat sayının zaten ½ olmasıdır.
Sonuç olarak
(13.5)10 = (1101.1)2
Olarak bulunur.
Biraz daha ilerleyerek farklı bir soru çözelim (bundan sonraki örneklerde sayının sadece ondalık kısmı verilecektir, tam kısım ile nasıl birleştiği anlatılmıştır)
(0.125)10 = ( ? )2
Hemen sayımızı kesirli sayıya çevirelim : 0.125 = 1/8
Bu durumda ondalık kısmına bakıyoruz: 0 x ½ + 0 x ¼ + 1 x 1/8 , o halde sayımız (0.001) 2 olarak bulunuyor.
Farklı bir örnek yapalım
(0.625)10 = ( ? )2
Sayının çevrilmiş haline bakalım (aslında 0.625 = 0.5 + 0.125 olduğunu biliyoruz) : 1 x ½ + 0 x ¼ + 1 x 1/8 , o halde sayımız (0.101) 2 olarak bulunuyor.
Buna benzer şekillerde çevirim işlemi için değerler kullanılabilir. Kolaylık olması açısından çevrilen tabanın çevrilmeden önceki tabandaki değerlerini bulmak işe yarayabilir.
Örneğin ½ , ¼ gibi sayıların onluk tabandaki karşılığını bilmek işe yarar.
Farklı bir örnek ile devam edelim. 1/8’in 0.125 olduğunu biliyoruz ve bunu kullanarak 8’lik tabana çevirim yapalım:
(0.125)10 = ( ? )8
Bildiğimiz üzere 1/8 , 8’lik tabandaki ilk çarpan, o halde çözüm (0.1) 8 olarak bulunmuş olunur.
Gelelim farklı tabanlar arası çevirime. Örneğin on altılık tabandan çevirim yapmak istiyor olalım
(0.AB)16 = ( ? )8 = ( ? )2 şeklinde sayının hem 8’lik hem de 2’lik tabandaki karşılıklarını soralım.
Bilindiği üzere onaltılık tabandaki sayıların (hexadecimal) sekizlik tabana (octal) ve ikilik tabana (binary) çevirimi sırasında bir kolaylık vardır.
Öncelikle ikilik tabandan başlayalım. Tek bir onaltılık sayı, ikilik tabanda 4 haneye tekabül eder.
A = 1010
B = 1011
Olarak yazılabilir. Bu değerleri çevirelim ve yazalım.
Örneğin sorumuz (0.A)16 = ( ? )2 şeklinde olsaydı hemen ( 0.1010 )2 yazabilirdik. Elbette sonda buluna 0 değeri hükümsüz olduğu için sonuca ( 0.101 )2 diyecektik.
Sorumuza dönersek (0.AB)16 = ( 0.10101011 )2 şeklinde bulmuş oluruz.
Gelelim sekizlik tabana. Bu sonucu, ikilik tabandan bulmak çok daha kolaydır. Burada her 3 biti (ikilik tabandaki her bir haneye bit denir) bir sayıya karşılık gelecek şekilde çeviriyoruz.
0.101 010 011 = 0. 5 2 6
Olarak çevrilir. Burada dikkat edilecek husus, çevirim işleminin tersten yapılmasıdır. Yukarıda da yazarken belirttiğim üzere hanelerin üstlerinin mutlak değeri, sağa doğru giderken büyür. Yani 0.101010011 sayısının çarpanlarının üstlerinin en küçüğü (veya bölüm olduğu için veya üstler eksi değerde olduğu için, mutlak değeri en büyük olan üst) sonda buluna 1 sayısının çarpanıdır. Ki bu sayı aşağıdaki şekilde düşünülebilir:
1 x ½ + 0 x ¼ + 1 x 1/8 + 0 x 1/16 + 1 x 1/32 + 0 x 1/64 + 0 x 1/128 + 1 x 1/256 + 1 x 1/512
Görüldüğü üzere en büyük çarpan 512 değeridir. Dolayısıyla 8’lik tabana çevirirken en önemli bit bu değerle çarpılacaktır.
Aslında literatürde bu çarpımda en küçük değere sahip bit anlamında least significant bit tabiri kullanılır. (En yüksek etkiye sahip bit için de most significant bit kullanılmaktadır).
Dolayısıyla 8’lik tabana çevirirken her üçlüyü kendi içinde ters çeviriyoruz:
0.101 010 011 = çevirim için 101 010 110 halini alır ve bunların onluk tabandaki karşılıkları, sonucu verir = 0. 5 2 6 olarak bulunmuş olur.
2,8,16 Sayı sistemlerini 10Luk tabanına çeviren programın algoritması. Programı yaptım fakat algoritması lazım yardımcı olurmusunuz ?
Aynı soru, daha önce farklı bir yazının altında sorulmuş ve cevaplamışım. Bu cevaba bir bakın, işinizi görmezse durumu anlatıp tekrar sorabilirsiniz, elimden geldiğince yardımcı olmaya çalışırım.
http://www.bilgisayarkavramlari.com/2010/01/13/c-ile-programlamaya-giris-quiz-sorulari-ve-cozumleri/#comment-65168
Başarılar
0,26 ya da 1.76 gibi ondalık sayıları normalize olarak nasıl yazabiliriz ? yardımcı olabilirmisiniz.
0.101 010 011 bu şekilde üçe ayırdığınız sayı aslında 0.10101011. Sondan üçüncü basamaktaki sıfır nasıl yazıldı
çevrilen sayı 0.526 ve 8 tabanında ve sonundaki sayı 6 dolayısıyla 6 ikilik tabanda 110 olarak yazılacağına göre ve bu bitleri ters olarak alacağımıza göre 011 olacaktır (en önemliden en önemsize doğru gidiş yazıda anlatılmıştır)
3,4 x 4,2 işlemini taban modeliyle nasıl yapabilirim? Yardımcı olabilir misiniz?
(111001010) iki tabanındaki sayıyı 8 tabanına çevirme nasıl oluyo yardımcı olurmusuz admin
Selamlar,
8=2^3 olduğu için,
2’lik sayıyı, 111 001 010 şeklinde yazılacak ve, hepsi kendi aralarında çevrilecek.
111 = 7
001 = 1
010 = 2
şeklinde çevrilecek.
sayımızı düz yazıyoruz, 712 oluyor.
iyi çalışmalar.
Hamit, 2 tabanındaki bir sayıyı 8 tabanına çevirmek için 2 yol var. Birincisi 2 tabanındaki sayiyi 10 tabanına çevirip sonra bulduğn sayıyı 8 tabanına çevirmek ya da benim tercih ettiğim kısa olan 2. Yolu var.
2. Yol:
Sayıları sağdan başlayarak 3 erli gruplar halinde ayır. Sonra her bir grubun içindeki rakamların üstüne yine sağdan başlayarak 1 2 4 yaz. Yani sağdan yazarsan 4 2 1 yazmalısın. Daha sonra altında 1 olan değerleri topla. Sonucu bulacaksın. Senin sorunun en sağındaki 3 lü grup 0 1 0. Üstlerine 4 2 1 yazdığın zaman sadece 2 nin altında 1 var. Yani o üçlü gruptan 2 gelir. Sağdan sola doğru devam ettiğinde 8 tabanındaki değerini bulacaksın.
Şadi Hocam Merhaba,
‘0.101 010 011 = çevirim için 101 010 110’ buradaki yazılan tersine çevrim, sadece 2’den 8’e çevrim için mi geçerli?
Çünkü, 16lık için bu tür bir işlem yapılmadı. Yabancı kaynaklarda bu tür çevrime rastlamadım hocam, kafam karıştı. online converter ile de bir uyumsuzluk var. Yardımınızı rica ediyorum hocam.
Tüm verdiğiniz bilgilerden ötürü çok teşekkür ederim.