Taban Dönüştürücü

Bu araç, 2 ile 16 arası herhangi bir sayı tabanı arasında dönüşüm yapmanızı sağlar. Örneğin ondalık (10) tabanında bir sayıyı ikilik (2), sekizlik (8) veya onaltılık (16) tabana çevirebilirsiniz. Onaltılık taban için A-F harfleri kullanılır.

Giriş Değeri:
Giriş Tabanı: Geçerli karakterler: 0-9
Çıktı Değeri:
Çıktı Tabanı:

📚 Algoritma Nasıl Çalışıyor?

Sayı Tabanları (Number Bases) Nedir?

Sayı tabanı, bir sayı sisteminde kullanılan rakam sayısıdır. Örneğin:

  • 2'lik taban (Binary): 0, 1 → 1010₂ = 10₁₀
  • 10'luk taban (Decimal): 0-9 → 255₁₀
  • 16'lık taban (Hexadecimal): 0-9, A-F → FF₁₆ = 255₁₀

1. Herhangi Bir Tabanı Ondalığa Çevirme

Algoritma: Her basamağı, tabanın üssü ile çarpıp topla

// Örnek: 1010₂ (ikilik) → ondalık
// 1×2³ + 0×2² + 1×2¹ + 0×2⁰
// = 8 + 0 + 2 + 0 = 10

function toDecimal(number, base) {
  let decimal = 0;
  for (let i = 0; i < number.length; i++) {
    const digit = charToDigit(number[i]);
    const power = number.length - 1 - i;
    decimal += digit * Math.pow(base, power);
  }
  return decimal;
}

Örnek Hesaplama:

// FF₁₆ (onaltılık) → ondalık
// F = 15, F = 15
// 15×16¹ + 15×16⁰ = 240 + 15 = 255

charToDigit('F')  // 15
charToDigit('F')  // 15
15 * 16^1 + 15 * 16^0 = 255

2. Ondalığı Herhangi Bir Tabana Çevirme

Algoritma: Bölme ve kalan (remainder) yöntemi

// Örnek: 255₁₀ → ikilik
// 255 ÷ 2 = 127, kalan 1  ← (en sağ basamak)
// 127 ÷ 2 = 63,  kalan 1
// 63 ÷ 2 = 31,   kalan 1
// ... devam eder
// Sonuç: 11111111₂

function fromDecimal(decimal, base) {
  let result = '';
  let number = decimal;
  
  while (number > 0) {
    const remainder = number % base;
    result = digitToChar(remainder) + result;
    number = Math.floor(number / base);
  }
  
  return result || '0';
}

Adım Adım Örnek:

// 255₁₀ → 16'lık taban
255 % 16 = 15 (F)  → result = "F"
255 / 16 = 15
15 % 16 = 15 (F)   → result = "FF"
15 / 16 = 0         → DUR
// Sonuç: FF₁₆

3. Karakter Dönüşüm Fonksiyonları

Karakter → Sayı:

function charToDigit(char) {
  if (char >= '0' && char <= '9') {
    return parseInt(char, 10);  // '5' → 5
  } else if (char >= 'A' && char <= 'F') {
    return 10 + (char.charCodeAt(0) - 'A'.charCodeAt(0));
    // 'A' → 10, 'B' → 11, ..., 'F' → 15
  }
  return -1;  // Geçersiz karakter
}

Sayı → Karakter:

function digitToChar(digit) {
  if (digit < 10) {
    return digit.toString();  // 5 → '5'
  } else {
    // 10 → 'A', 11 → 'B', ..., 15 → 'F'
    return String.fromCharCode('A'.charCodeAt(0) + (digit - 10));
  }
}

4. İki Aşamalı Dönüşüm Stratejisi

Herhangi bir tabandan herhangi bir tabana dönüşüm için iki aşama:

  1. Kaynak taban → Ondalık: Toplama işlemi
  2. Ondalık → Hedef taban: Bölme ve kalan
// Örnek: 4'lük taban → 8'lik taban
// "123"₄ → ondalık → "27"₈

// 1. Adım: 4'lük → Ondalık
// 1×4² + 2×4¹ + 3×4⁰ = 16 + 8 + 3 = 27

// 2. Adım: Ondalık → 8'lik
// 27 ÷ 8 = 3, kalan 3  → "3"
// 3 ÷ 8 = 0, kalan 3   → "33"
// Sonuç: "33"₈

Önemli Noktalar

  • Pozisyon Değeri: En soldaki basamak en yüksek üsse sahiptir
  • 0 Değeri: Her tabanda 0 aynı şekilde gösterilir
  • Geçerlilik Kontrolü: Girdi, tabanın izin verdiği karakterlerle sınırlıdır
  • Büyük/Küçük Harf: Hex karakterleri otomatik büyük harfe çevrilir