Sıklıkla kullanılan dört farklı sayma sistemini öğrendik. Peki onlu sistemdeki bir sayıyı ikili sisteme nasıl çevireceğiz?
Python programlama dilinde bu tür işlemleri kolaylıkla yapmamızı sağlayan birtakım fonksiyonlar bulunur.
Ayrıca özel fonksiyonları kullanmanın yanısıra karakter dizisi biçimlendirme (string formatting) yöntemlerini kullanarak da sayma sistemlerini birbirine dönüştürebiliriz.
Biz burada her iki yöntemi de tek tek inceleyeceğiz.
Fonksiyon Kullanarak
bin()
Bu fonksiyon bir sayının ikili (binary) sayı sistemindeki karşılığını verir:
>>> bin(2)
'0b10'
Bu fonksiyonun çıktı olarak bir karakter dizisi verdiğine dikkat edin. Bu karakter dizisinin ilk iki karakteri (‘0b’), o sayının ikili sisteme ait bir sayı olduğunu gösteren bir işarettir.
Bu bilgilerden yola çıkarak, yukarıdaki karakter dizisinin gerçek ikili kısmını almak için şu yöntemi kullanabilirsiniz:
>>> bin(2)[2:]
'10'
hex()
Bu fonksiyon, herhangi bir sayıyı alıp, o sayının on altılı sistemdeki karşılığını verir:
>>> hex(10)
'Oxa'
Hatırlarsanız bin()
fonksiyonunun çıktısındaki ilk iki karakter (0b), o sayının ikili sisteme ait bir sayı olduğunu gösteren bir işaret olarak kullanılıyordu.
hex()
fonksiyonunun çıktısındaki ilk iki karakter de (0x), o sayının on altılı sisteme ait bir sayı olduğunu gösteriyor.
oct()
Bu fonksiyon, herhangi bir sayıyı alıp, o sayının sekizli sistemdeki karşılığını verir:
>>> oct(10)
'0o12'
Tıpkı bin()
ve hex()
fonksiyonlarında olduğu gibi (0b ve 0x), aynı şekilde oct()
fonksiyonunun çıktısındaki ilk iki karakter de (0o), o sayının sekizli sisteme ait bir sayı olduğunu gösteriyor.
int()
Bildiğiniz gibi bu fonksiyon herhangi bir sayı veya sayı değerli karakter dizisini tam sayıya (integer) dönüştürmek için kullanılıyor.
int()
fonksiyonunun şimdiye kadar gördüğümüz işlevi dışında bir işlevi daha bulunur: Biz bu fonksiyonu kullanarak herhangi bir sayıyı onlu sistemdeki karşılığına dönüştürebiliriz:
>>> int('7bc', 16)
1980
Gördüğünüz gibi, bu fonksiyonu kullanırken dikkat etmemiz gereken bazı noktalar var.
İlkin, eğer int()
fonksiyonunu yukarıdaki gibi bir dönüştürme işlemi için kullanacaksak, bu fonksiyona verdiğimiz ilk parametrenin bir karakter dizisi olması gerekiyor.
Dikkat etmemiz gereken ikinci nokta, int()
fonksiyonuna verdiğimiz ikinci parametrenin niteliği. Bu parametre, dönüştürmek istediğimiz sayının hangi tabanda olduğunu gösteriyor.
Yukarıdaki örneğe göre biz, on altı tabanındaki 7bc sayısını on tabanına dönüştürmek istiyoruz.
Bir de şu örneklere bakalım:
>>> int('1100', 2)
12
>>> int('1100', 16)
4352
İlk örnekte, ikili sistemdeki 1100 sayısını onlu sisteme çeviriyoruz ve 12 sayısını elde ediyoruz.
İkinci örnekte ise on altılı sistemdeki 1100 sayısını onlu sisteme çeviriyoruz ve 4352 sayısını elde ediyoruz.
Biçimlendirme Yoluyla
Esasında biz karakter dizisi biçimlendirme yöntemlerini kullanarak dönüştürme işlemlerini nasıl gerçekleştireceğimizi biliyoruz.
Biz burada zaten öğrendiğimiz bu bilgileri tekrar ederek öğrendiklerimizi pekiştirme amacı güdeceğiz.
b
Bu karakteri kullanarak bir sayıyı ikili düzendeki karşılığına dönüştürebiliriz:
>>> '{:b}'.format(12)
'1100'
Bu karakter, bin()
fonksiyonuyla aynı işi yapar.
x
Bu karakteri kullanarak bir sayıyı on altılı düzendeki karşılığına dönüştürebiliriz:
>>> '{:x}'.format(1980)
'7bc'
Bu karakter, hex()
fonksiyonuyla aynı işi yapar.
o
Bu karakteri kullanarak bir sayıyı sekizli düzendeki karşılığına dönüştürebiliriz:
>>> '{:o}'.format(1980)
'3674'
Bu karakter, oct()
fonksiyonuyla aynı işi yapar.
Bütün bu anlattıklarımızdan sonra (eğer o zaman anlamakta zorluk çekmişseniz) aşağıdaki kodları daha iyi anlamış olmalısınız:
sayı_sistemleri = ["onlu", "sekizli", "on altılı", "ikili"]
print(("{:^9} "*len(sayı_sistemleri)).format(*sayı_sistemleri))
for i in range(17):
print("{0:^9} {0:^9o} {0:^9x} {0:^9b}".format(i))
Bir sayıyı onlu düzene çevirmek için ise sadece int()
fonksiyonunu kullanabiliyoruz. Böyle bir çevirme işlemini karakter dizisi biçimlendirme yöntemlerini kullanarak yapamıyoruz.
Ama elbette, eğer başka bir sayma sisteminden onlu sisteme çevirdiğiniz bir sayıyı herhangi bir karakter dizisi içinde biçimlendirmek isterseniz şöyle bir kod kullanabilirsiniz:
>>> n = '7bc'
>>> "{} sayısının onlu karşılığı {:d} sayısıdır.".format(n, int(n, 16))
…veya:
>>> n = '7bc'
>>> "{} sayısının onlu karşılığı {} sayısıdır.".format(n, int(n, 16))
Zira bildiğiniz gibi, Python’da onlu sayıları temsil eden harf d harfidir. Eğer {} yapısı içinde herhangi bir harf kullanmazsanız yukarıdaki durumda Python {:d} yazmışsınız gibi davranacaktır.
Sayma Sistemlerinin Birbirlerine Karşı Avantajları
İşte bilgisayarlar bu sayı sistemleri arasında sadece ikili sayı sistemini ‘anlayabilir’. 0 ve 1. Dolayısıyla ikili sayma sistemi bilgisayarın iç işleyişine en uygun sistemdir.
ikili sistemde ~0 volt’u 0 ile, ~5 volt’u ise 1 ile temsil edebiliyoruz. Yani devreden elektrik geçtiğinde o devrenin değeri 1, elektrik geçmediğinde ise 0 olmuş oluyor.
Bilgisayarın işlemcisi sadece bu iki farklı durumu kullanarak her türlü hesaplama işlemini gerçekleştirebilir.
Dediğimiz gibi, ikili sayma sistemi bilgisayarın yapısına gayet uygundur. Ama biz insanlar açısından sadece iki simge yardımıyla saymaya çalışmak epey zor olacaktır.
Bildiğiniz gibi, ikili sayma sistemindeki her bir basamağa ‘bit’ adı verilir. İkili sayma sistemini kullanarak, 0’dan 256’ya kadar sayabilmek için toplam 8 bitlik (yani 8 hanelik) bir yer kullanmanız gerekir.
On altılı sistemde ise bu işlemi sadece iki basamakla halledebilirsiniz. Yani on altılı sistemde 00 ile FF arasına toplam 255 tane sayı sığdırılabilir.
Dolayısıyla on altılı sistemi kullanarak, çok büyük sayıları çok az yer kullanarak gösterebilirsiniz:
>>> for i in range(256):
... print(i, bin(i)[2:], hex(i)[2:])
...
0 0 0
(...)
255 11111111 ff
>>>
Gördüğünüz gibi, onlu sistemde 255 şeklinde, ikili sistemde ise 11111111 şeklinde gösterilen sayı on altılı sistemde yalnızca ff şeklinde gösterilebiliyor.
Dolayısıyla, kullanım açısından, biz insanlar için on altılık sayma sisteminin ikili sisteme kıyasla çok daha pratik bir yöntem olduğunu söyleyebiliriz.
Ayrıca on altılı sistem, az alana çok veri sığdırabilme özelliği nedeniyle HTML renk kodlarının gösterilmesinde de tercih edilir.
Örneğin beyaz rengi temsil etmek için on altılı sistemdeki #FFFFFF ifadesini kullanmak rgb(255,255,255) ifadesini kullanmaya kıyasla çok daha mantıklıdır.
Hatta #FFFFFF ifadesini #FFF şeklinde kısaltma imkanı dahi vardır.
Bu eğitim seti Kaynak tarafından oluşturulmuştur.