İkili bir sayıyı ondalık sisteme nasıl çevirirsiniz?
İkili bir sayıyı ondalık sisteme çevirmek için her basamağı (bit), konumuna karşılık gelen 2'nin kuvvetiyle çarpmanız (sağdan sola doğru 0'dan başlayarak) ve elde edilen sonuçları toplamanız gerekir. Örneğin, 101 ikili sayısı ondalık sistemde $1 \cdot 2^2 + 0 \cdot 2^1 + 1 \cdot 2^0 = 4 + 0 + 1 = 5$ değerine eşittir.
Bu yöntem, bilgisayarların çalışma prensibini, ağ adreslemeyi ve düşük seviyeli programlamayı anlamak için temeldir. Aşağıda algoritma, hesaplamaları hızlandırma yolları ve ondalık kısımlı sayılarla çalışma detaylıca incelenmiştir.
Özet: İkili sistem 2 tabanını kullanır. Her bir '1'in konumu, onun "ağırlığını" yani 2'nin kuvvetini belirler. Tüm '1'lerin ağırlıklarının toplamı ondalık değeri verir.
Çevirme için temel algoritma
Hayatta kullandığımız ondalık sistem 10 tabanlıdır. İkili sistem ise 2 tabanlıdır ve sadece iki rakam kullanır: 0 ve 1.
Adım adım kılavuz
- İkili sayıyı yazın.
- Bitlerin konumlarını sağdan sola doğru, sıfırdan başlayarak numaralandırın. Bunlar 2 sayısının üsleri olacaktır.
- Her biti, konumunun üssü kadar 2 ile çarpın.
- Bit
0ise, çarpma sonucu her zaman0olur. - Bit
1ise, sonuç ilgili 2'nin kuvveti olacaktır.
- Bit
- Elde edilen tüm değerleri toplayın.
Örnek analiz
1101 sayısını ondalık sisteme çevirelim.
| Konum (üs) | 3 | 2 | 1 | 0 | | :--- | :-: | :-: | :-: | :-: | | Bit | 1 | 1 | 0 | 1 | | Hesaplama | $1 \cdot 2^3$ | $1 \cdot 2^2$ | $0 \cdot 2^1$ | $1 \cdot 2^0$ | | Değer | 8 | 4 | 0 | 1 |
Toplam: $8 + 4 + 0 + 1 = 13$. Cevap: $1101_2 = 13_{10}$.
Hızlı hesaplama için 2'nin kuvvetleri tablosu
Elle yapılan hesaplamaları hızlandırmak için ilk birkaç 2'nin kuvvetini ezberlemek faydalıdır. Bu, her seferinde 2'yi üsse yükseltme zahmetinden kurtarır.
| Üs ($n$) | Değer ($2^n$) | Not |
|---|---|---|
| 0 | 1 | Başlangıç noktası |
| 1 | 2 | |
| 2 | 4 | |
| 3 | 8 | |
| 4 | 16 | Baytlarda sıkça kullanılır |
| 5 | 32 | |
| 6 | 64 | |
| 7 | 128 | Tek baytın maksimum değeri (işaretsiz) — 255 |
| 8 | 256 | |
| 9 | 512 | |
| 10 | 1024 | Kilobayt (bilişimde) |
İpucu: Bir sayının büyüklük sırasını hızlıca tahmin etmeniz gerekirse, en soldaki (en yüksek basamaklı) '1'i bulun. Sayı, bu 2'nin kuvvetinin değerinden biraz daha büyük olacaktır. Örneğin, 100000 sayısında en soldaki '1' 5. konumdadır ($2^5=32$). Demek ki sayı 32'den biraz büyüktür (aslında diğer bitler sıfır olduğu için tam olarak 32'dir).
Ondalık kısımlı ikili sayıların çevrilmesi
İkili gösterimde virgül (veya nokta) varsa, algoritma sadece ondalık kısım için üslerin negatif hale gelmesi açısından değişir.
Numaralandırma kuralı:
- Tam kısım sağdan sola numaralandırılır: $0, 1, 2...$
- Ondalık kısım virgülden itibaren soldan sağa numaralandırılır: $-1, -2, -3...$
Örnek: $10.11_2$
-
Tam kısım (
10):- $1 \cdot 2^1 = 2$
- $0 \cdot 2^0 = 0$
- Tam kısmın toplamı: $2$.
-
Ondalık kısım (
.11):- Virgülden sonraki ilk bit: $1 \cdot 2^{-1} = 1 \cdot 0.5 = 0.5$
- Virgülden sonraki ikinci bit: $1 \cdot 2^{-2} = 1 \cdot 0.25 = 0.25$
- Ondalık kısmın toplamı: $0.5 + 0.25 = 0.75$.
-
Sonuç: $2 + 0.75 = 2.75$. Cevap: $10.11_2 = 2.75_{10}$.
Önemli: Tüm ondalık kesirler, ikili sistemde sonlu bir rakam kümesiyle tam olarak temsil edilemez (tıpkı ondalık sistemde $1/3$'ün sonsuz $0.333...$ haline gelmesi gibi). Ters çevirme işlemlerinde (ondalıktan ikiliye) bu durum programlamada yuvarlama hatalarına yol açabilir.
Alternatif yöntem: Horner Şeması
Uzun sayılar için ardışık çarpma yöntemi (Horner şeması) daha kullanışlıdır. Bu yöntem, soldan sağa ilerleyerek "akıldan" hesap yapmanıza olanak tanır.
Algoritma:
- İlk bitten (en soldaki) başlayın.
- Mevcut değeri 2 ile çarpın ve sonraki biti ekleyin.
- Sayının sonuna kadar 2. adımı tekrarlayın.
$1101_2$ için örnek:
- İlk biti alıyoruz: 1
- $1 \cdot 2 + 1 (\text{sonraki bit}) = 3$
- $3 \cdot 2 + 0 (\text{sonraki bit}) = 6$
- $6 \cdot 2 + 1 (\text{son bit}) = 13$
Sonuç: 13. Bu yöntemin avantajı, 2'nin kuvvetlerini ezberlemenize gerek kalmaması ve programlama uygulamaları için uygun olmasıdır.
Çevirme sırasında sık yapılan hatalar
- Yanlış konum sayımı. En yaygın hata, üsleri 1'den başlatmak veya soldan sağa doğru saymaktır. Unutmayın: En küçük basamak (sağdaki) her zaman 0. üsse sahiptir.
- Sıfırları görmezden gelmek. Sıfırlar toplamı etkilemez ancak konum kaplarlar. Bir konumu atlamak, sonraki tüm '1'ler için üs numaralandırmasını bozar.
- Ondalık kısım karmaşası. Genellikle virgülden sonraki üslerin negatif olduğu unutulur ve bunlar pozitif gibi ($2^1, 2^2$) hesaplanarak sonuç olduğundan büyük çıkar.
- Kaynak verilerdeki yazım hataları. İkili sistemde sadece 0 ve 1 bulunabilir. Eğer 2 veya daha büyük bir rakam görürseniz, kaynak sayı yanlış yazılmıştır veya bu ikili bir sistem değildir.
SSS
Büyük bir ikili sayıyı hızlıca nasıl çeviririm? Sayıyı sağdan sola doğru 4 bitlik gruplara (tetradlara) ayırın. Her tetradı onaltılık bir rakama (0–F) çevirin, ardından HEX'ten DEC'e çevirmek için bir hesap makinesi veya tablo kullanın. Bu, 20+ bit için 2'nin kuvvetlerini tek tek hesaplamaktan daha hızlıdır.
Bilgisayarlar neden ikili sistemi kullanır? Teknik olarak, elektrik sinyalindeki iki kararlı durumu gerçekleştirmek daha kolaydır: "akım var" (1) ve "akım yok" (0). Bu, daha fazla tabana sahip sistemlere kıyasla veri depolama ve işlemesinde yüksek güvenilirlik sağlar.
Negatif ikili sayıları çevirebilir miyim? Evet, ancak genellikle tümleyen kod kullanılır. En yüksek basamaklı bit işareti belirtir. Böyle bir sayıyı ondalığa çevirmek için önce bitleri ters çevirmeniz, 1 eklemeniz, elde edilen pozitif sayıyı normal şekilde çevirmeniz ve eksi işaretini eklemeniz gerekir.
Kontrol etmek için çevrimiçi hesap makineleri var mı?
Evet, "Programcı" (Programmer mode) modundaki herhangi bir mühendislik hesap makinesi BIN, DEC, OCT ve HEX arasında dönüşümü destekler. Python'da bu işlem int('1010', 2) fonksiyonu ile yapılır.