Sekizlikten Onluya Çevirici

8 tabanındaki sekizlik sayıları standart onluk tabana dönüştür.

Eski bir JavaScript konsolunda ikinci bir parametre vermeden parseInt("010") yazdığında sonuç on yerine 8 dönebilir. Bu beklenmedik sonucun teknik bir sebebi vardır: Sayının başındaki sıfır eskiden sekizlik tabanı işaret ederdi ve tarayıcılar kuralı değiştirene kadar bu durum yazılımlarda pek çok sessiz hataya yol açtı.

Sekizlik taban ile onluk taban arasındaki mantık

Sekizlik sistemde her basamak 10 yerine 8 kuvvetiyle çarpılır ve rakamlar yalnızca 0 ile 7 arasında değer alır; sekizlik sistemde 8 veya 9 rakamı yer almaz. Örneğin 57 sekizlik değerini ele alalım: 5 rakamı sekizler basamağında, 7 rakamı ise birler basamağında bulunur.

Dönüşüm işlemi (5 × 8) + 7 = 47 şeklinde hesaplanır. Bu miktar onaltılık düzende 2F, ikilik düzende ise 101111 değerine karşılık gelir. Farklı görünen bu üç gösterim aslında tamamen aynı sayısal miktarı ifade eder.

Başta yer alan sıfır kaynaklı dönüştürme hatası

C programlama dilinde başında doğrudan 0 bulunan bir sayı sabiti her zaman sekizlik olarak değerlendirilir; yani kaynak kod içindeki 010 ifadesi on değil, 8 anlamına gelir. JavaScript bu davranışı yıllarca resmi standart haline gelmeden gayriresmi olarak sürdürdü, ardından standartlaştırıp kullanımdan kaldırdı.

Bu durum özellikle tarih alanı, posta kodu veya ürün kodu gibi biçimlendirme amacıyla başına sıfır eklenmiş metinleri taban belirtmeden sayıya çevirirken sorun yarattı. ECMAScript 5 standardı parseInt işlevini varsayılan olarak onluk tabana sabitledi; fakat bu eski kural miras kalan kod bloklarında ve kuralı değiştirmeyen dillerde hâlâ karşına çıkabilir.

Sekizlik sayı biçiminin güncel kullanım alanları

  • Unix dosya izinleri — chmod ve umask değerleri sekizlik taban mantığıyla kurgulanmıştır; bu nedenle geleneksel olarak başında sıfır veya sekizlik ön ekiyle yazılır.
  • C ve C++ kaynak kodları — Bir tamsayının başındaki sıfır karakteri, dilin ilk sürümlerinden bu yana sekizlik sistem belirteci olarak yorumlanmaya devam eder.
  • Modern açık ön ekler — Güncel JavaScript, Python ve çoğu çağdaş dil, geçmişteki karışıklıkları önlemek adına sekizlik sayılar için doğrudan 0o ön ekini zorunlu tutar.

Sekizlik sayıyı onluk tabana elle dönüştürme adımları

  1. Sekizlik sayının her rakamını sağdan sola doğru 0 ile başlayan basamak numaralarıyla eşleştir.
  2. Her bir rakamı, 8 sayısının basamak sırasındaki kuvvetiyle çarp.
  3. Elde ettiğin tüm basamak çarpımlarını topla.
  4. Girdiğin orijinal değerde 8 veya 9 rakamı bulunmadığını kontrol et; bu rakamlardan biri varsa girdi geçerli bir sekizlik sayı değildir.

Sekizlik ve onluk dönüşümü hakkında sorular

Sekizlik sistemde neden yalnızca 0 ile 7 arasındaki rakamlar kullanılır?

Sekizlik sistem 8 tabanında çalıştığı için tek bir basamak yalnızca sekiz farklı durumu temsil edebilir. Sayıda 8 veya 9 rakamının yer alması, ikilik düzende 2 rakamının bulunamayacağı gibi sekizlik kurallarına aykırıdır.

Sekizlik düzen Unix izinleri haricinde nerelerde tercih edilir?

Günümüzde yaygınlığı oldukça sınırlıdır. En bilinen yeri dosya izinleri olmakla beraber, bazı eski gömülü sistemlerde, miras dosya biçimlerinde ve C ailesi kaynak kodlarında karşına çıkabilir.

Eski parseInt sekizlik hatası neden oluşuyordu?

Eski JavaScript motorları açık bir taban belirtilmediğinde 0 ile başlayan sayı metinlerini sekizlik kabul ederdi. ‘010’ metni onluk taban bekleyen sistemlerde sessizce 8 değerine dönüşerek hatalara yol açardı.

Bu çeviri chmod değerlerini çözümlemekten farklı mıdır?

Temel matematik aynıdır; onluk değer aynı sekizlik basamakların farklı bir sayısal yorumudur. Chmod değerleri genellikle doğrudan bir miktar yerine izin bayrakları olarak okunur.

Modern JavaScript sekizlik sayıları destekler mi?

Evet, fakat yalnızca 0o57 örneğindeki gibi açık bir 0o ön ekiyle kullanılabilir. Başına sadece sıfır konularak yazılan eski sekizlik sözdizimi kullanımdan kaldırılmıştır ve katı modda çalışmaz.

Cookie
Verilerinizi önemsiyoruz ve deneyiminizi geliştirmek için çerezleri kullanmayı çok isteriz.