Sayı Tabanı Çevirme Nasıl Yapılır? (İkili, Sekizli, Onlu, Onaltılı)
Bir sayıyı bir tabandan diğerine çevirmek için, o sayının basamaklarını hedef tabana göre yeniden ifade etmeniz gerekir. Onluktan ikili, sekizli veya onaltılığa geçerken en pratik yol, sayıyı hedef tabana art arda bölüp kalanları not almak, sonra bu kalanları aşağıdan yukarıya doğru okumaktır.
Sayı tabanı (radix) gerçekte ne anlama gelir
Bir sayı tabanı, konumsal bir sayı sisteminin kaç farklı rakam kullandığını belirler. Günlük hayatta kullandığımız onluk sistem (taban 10) 0’dan 9’a kadar on rakam kullanır. İkili sistem (taban 2) sadece 0 ve 1’i bilir. Sekizli sistem (taban 8) 0’dan 7’ye kadar sekiz rakamla sınırlıdır. Onaltılık sistem (taban 16) ise 0-9 rakamlarına ek olarak, 10’dan 15’e kadar olan değerleri tek bir karakterle yazabilmek için A’dan F’ye kadar harfler ekler.
Her sistemde bir sayının değerini belirleyen şey, basamağın kendisi değil, o basamağın bulunduğu konumun (pozisyonun) taşıdığı ağırlıktır. Onluk sistemde 202 sayısını ele alalım: soldan sağa “2”, “0” ve “2” rakamları sırasıyla yüzler, onlar ve birler basamağındadır, yani sayının gerçek değeri 2×10² + 0×10¹ + 2×10⁰’dır. Aynı mantık her tabanda geçerlidir, sadece basamağın ağırlığı 10’un değil, o sistemin tabanının kuvvetleridir. İkilikte bir basamağın ağırlığı 2’nin kuvveti, sekizlikte 8’in kuvveti, onaltılıkta 16’nın kuvvetidir. Bu tek fikir, aşağıdaki tüm çevirme yöntemlerinin temelini oluşturur.
Onluk sayıyı ikili, sekizli ve onaltılığa elle çevirme
Onluk 202 sayısını üç tabana çevirerek başlayalım. İki farklı yöntem var, ikisi de aynı sonuca çıkar ama farklı durumlarda işinize yarar.
Bölme-kalan yöntemi, herhangi bir tabana çevirirken çalışır: sayıyı hedef tabana bölün, kalanı not edin, bölümü tekrar aynı tabana bölün, sıfıra ulaşana kadar devam edin. Kalanları en son bulduğunuzdan en ilk bulduğunuza doğru, yani aşağıdan yukarıya okuyunca sonucu elde edersiniz.
202’yi sekizliğe çevirmek için:
| Adım | İşlem | Bölüm | Kalan |
|---|---|---|---|
| 1 | 202 ÷ 8 | 25 | 2 |
| 2 | 25 ÷ 8 | 3 | 1 |
| 3 | 3 ÷ 8 | 0 | 3 |
Kalanları aşağıdan yukarıya okuyun: 3, 1, 2. Yani 202 onluk, sekizlikte 312’dir.
Aynı yöntemi 16 tabanıyla tekrarlayınca:
| Adım | İşlem | Bölüm | Kalan |
|---|---|---|---|
| 1 | 202 ÷ 16 | 12 | 10 (A) |
| 2 | 12 ÷ 16 | 0 | 12 (C) |
Kalanları aşağıdan yukarıya okuyun: C, A. Yani 202 onluk, onaltılıkta CA’dır. 10 değeri A harfiyle, 12 değeri C harfiyle yazılır, çünkü onaltılık sistemde tek basamaklı gösterim için 10-15 arası değerler harflere denk gelir.
İkili sayı için ikinci bir yöntem daha kullanışlıdır: basamak değeri (çıkarma) yöntemi. 202’den küçük veya eşit en büyük 2’nin kuvvetini bulup çıkarın, kalanla aynı işlemi tekrarlayın:
| 2’nin kuvveti | Değer | 202’de var mı? | Kalan |
|---|---|---|---|
| 2⁷ | 128 | Evet | 202 − 128 = 74 |
| 2⁶ | 64 | Evet | 74 − 64 = 10 |
| 2⁵ | 32 | Hayır | 10 |
| 2⁴ | 16 | Hayır | 10 |
| 2³ | 8 | Evet | 10 − 8 = 2 |
| 2² | 4 | Hayır | 2 |
| 2¹ | 2 | Evet | 2 − 2 = 0 |
| 2⁰ | 1 | Hayır | 0 |
“Evet” bulunan basamaklara 1, diğerlerine 0 yazınca soldan sağa 11001010 çıkar. Doğrulaması basit: 128 + 64 + 8 + 2 = 202. Yani hem bölme-kalan yöntemi hem de basamak değeri yöntemi aynı üç sonucu doğrular: 202 onluk = 11001010 ikili = 312 sekizlik = CA onaltılık.
Sekizli ve onaltılı sayıları tekrar onluğa çevirmek
Ters yönde, yani bir sayıyı başka bir tabandan onluğa çevirirken, her basamağı kendi konumunun ağırlığıyla çarpıp toplarsınız. Bunu Unix/Linux dünyasından tanıdık bir örnekle gösterelim: chmod komutuyla dosya izinlerinde sık görülen sekizlik değer 755.
755 sekizlik sayısını onluğa çevirmek için her basamağı 8’in ilgili kuvvetiyle çarpın:
7 × 8² + 5 × 8¹ + 5 × 8⁰
= 7 × 64 + 5 × 8 + 5 × 1
= 448 + 40 + 5
= 493
Yani sekizlik 755, onlukta 493’tür. İzin bağlamında bu üç basamak (7, 5, 5) sırasıyla dosya sahibinin, grubun ve diğer kullanıcıların izinlerini temsil eder; her basamak kendi içinde 3 bitlik bir ikili değerdir (okuma=4, yazma=2, çalıştırma=1). Bu yüzden sekizlik ile ikili arasında geçiş yaparken pratik bir kısayol var: her sekizlik basamak tam olarak 3 ikili bite karşılık gelir. 7 = 111, 5 = 101, 5 = 101 basamaklarını yan yana yazınca, aradaki hesaplamayı atlayarak doğrudan ikiliyi elde edersiniz: 111101101.
Aynı 3-bit gruplama mantığının onaltılık karşılığı 4 bittir: her onaltılık basamak tam olarak bir “nibble” yani 4 bitlik bir gruba karşılık gelir. 755 sekizlik sayının onaltılık karşılığı 1ED’dir; bunu doğrudan 493 onluk değerinden bölme-kalan yöntemiyle de bulabilirsiniz, sonuç aynıdır. Bu 3-bit ve 4-bit gruplama, sekizlik ve onaltılık sistemlerin bilgisayar dünyasında neden bu kadar sık kullanıldığını açıklar: ikili veriyi insan gözü için okunabilir hale getirirken hiçbir bilgi kaybı olmadan sıkıştırırlar. Bellek adresleri, renk kodları (#RRGGBB), bayt değerleri ve hata kodları genelde onaltılık yazılır, çünkü örneğin 0xFF sadece iki karakterken karşılığı olan 11111111 sekiz karakter tutar.
Kendi sayılarınızla deneyin
Yukarıdaki adımları elle takip etmek mantığı öğrenmek için gerekli, ama günlük işte bunu her seferinde tekrarlamak zaman kaybı. Aşağıdaki araca herhangi bir alana (onlu, ikili, sekizli veya onaltılı) bir değer yazın, diğer üç alan anında güncellensin.
Yaygın hatalar ve özel durumlar
Negatif sayılarda iki’ye tümleyeni (two’s complement) beklemek. Bu araç negatif sayıları işaret-büyüklük (sign-magnitude) gösterimiyle ele alır, yani sayının başına sadece bir eksi işareti koyar. Onluk -18 sayısı ikilikte -10010, sekizlikte -22, onaltılıkta -12 olarak gösterilir. Bu, çoğu programlama dilinin işaretli tamsayılarda kullandığı iki’ye tümleyen yöntemiyle aynı değildir: 8 bitlik iki’ye tümleyende -18 sayısı 11101110 olarak yazılır, yani tamamen farklı bir bit dizisi. Bir programda işaretli tamsayı bit düzenini kontrol ediyorsanız, bu aracın çıktısının o gösterimle bire bir eşleşmeyeceğini bilerek kullanın.
Onaltılıkta harflerin büyük/küçük yazımını karıştırmak. Girdi alanına ca, Ca veya CA yazmanız fark etmez, üçü de aynı 202 değerine karşılık gelir; araç her zaman sonucu büyük harfle (CA) gösterir. Ama kendi kodunuzda bir dizeyi karşılaştırıyorsanız, büyük/küçük harf duyarlı bir karşılaştırma kullandığınızdan emin olun, aksi halde “CA” ile “ca” farklı dizeler olarak görünür.
Baştaki sıfırların sayının değerini değiştirdiğini sanmak. 00202, 0202 ve 202 onlukta tamamen aynı değeri temsil eder; baştaki sıfırlar sadece görsel dolgu, matematiksel bir anlamı yoktur. Aynı kural ikili, sekizli ve onaltılık için de geçerlidir.
Kod içindeki 0x, 0b, 0o öneklerini araca da yazmak. Birçok programlama dilinde 0xFF, 0b1010 veya 0o17 gibi öneklerle bir sabitin tabanını belirtirsiniz. Bu araç ise öneksiz, sade rakam girişi bekler: onaltılık alana 0xFF değil, sadece FF yazmalısınız. Öneki kopyalayıp yapıştırmak geçersiz bir girdi olarak değerlendirilir.
Çok büyük sayılarda hassasiyet kaybını fark etmemek. Araç JavaScript’in güvenli tamsayı aralığını kullanır, pratikte yaklaşık 2⁵³ − 1’e (9 katrilyon civarı) kadar tam sonuç verir. Bunun çok üzerindeki sayılarda ondalık hassasiyet bozulmaya başlar; kripto anahtarları gibi devasa tamsayılarla çalışıyorsanız özel bir büyük-tamsayı kütüphanesi kullanmanız gerekir.
Yuvarlak sayılarla çalışmak isteyenler için bir örnek daha: onluk 4096 (yani 2¹²), ikilikte 1000000000000, sekizlikte 10000, onaltılıkta 1000 olur. İkinin tam kuvveti olan her sayı, her tabanda böyle temiz, sıfırlarla dolu bir örüntü üretir; bu da bellek boyutlarının (4 KB, 64 KB gibi) neden hep bu tür “yuvarlak” görünen değerler olduğunu açıklar.
Sık sorulan sorular
Sayı tabanı (radix) tam olarak nedir? Sayı tabanı, konumsal bir sayı sisteminde kaç farklı rakamın kullanıldığını belirten sayıdır. Onluk sistemde taban 10’dur ve 0-9 rakamları kullanılır. İkilikte taban 2’dir, sadece 0 ve 1 vardır. Sekizlikte taban 8, onaltılıkta ise taban 16’dır ve 10-15 arası değerler için A-F harfleri eklenir.
Programcılar neden onluk yerine onaltılık kullanır?
Çünkü onaltılık ikiliyle birebir örtüşür: her onaltılık basamak tam olarak 4 bite karşılık gelir. Bu sayede 0xFF gibi iki karakterlik bir onaltılık değer, sekiz karakterlik 11111111 ikili değerini kısa ve okunabilir biçimde temsil eder. Bellek adresleri, renk kodları ve hata kodlarında bu yüzden onaltılık tercih edilir.
İkili sayıyı elle onluğa nasıl çeviririm? Her ikili basamağı, sağdan başlayarak 2’nin ilgili kuvvetiyle çarpıp toplayın. Örneğin 11001010 için: 128 + 64 + 0 + 0 + 8 + 0 + 2 + 0 = 202. Bit 1 olan konumların ağırlıklarını toplamak, bit 0 olanları görmezden gelmek yeterlidir.
Bu araç en fazla ne kadar büyük sayıyı işleyebilir? Araç JavaScript’in standart güvenli tamsayı aralığını kullanır, yani yaklaşık 2⁵³ − 1’e (9 katrilyona yakın) kadar tam ve güvenilir sonuç verir. Bunun ötesindeki değerlerde ondalık yuvarlama hataları ortaya çıkabilir, bu tür çok büyük sayılar için özel bir büyük-tamsayı kütüphanesi kullanmak gerekir.
Negatif sayılar destekleniyor mu?
Evet, dört alandan herhangi birine eksi işaretiyle bir değer yazdığınızda diğer üç alan da negatif karşılığını gösterir. Bunun iki’ye tümleyen değil, işaret-büyüklük gösterimi olduğunu unutmayın: -18 örneğin ikilikte -10010 olarak gösterilir, 8 bitlik iki’ye tümleyendeki 11101110 ile karıştırılmamalıdır.
Doldurulmuş değerlerle bu aracı bağlantı olarak paylaşabilir miyim? Evet. Siz alanlara yazdıkça sayfanın adresi otomatik güncellenir, bu adresi kopyalayıp paylaştığınızda bağlantıyı açan kişi tam olarak sizin girdiğiniz değerleri hazır bulur.