Sayı tabanı dönüştürücü

Bir sayıyı ikilik, sekizlik, onluk, on altılık ve 2–36 arası bir taban arasında dönüştürür; sabit genişlikli ikiye tümleyen ve tıklanabilir bit ızgarası.

Genişlik
İkilik
Sekizlik
Onluk
On altılık
Taban
Bitler — çevirmek için tıklayın

8 bit genişlik, 8 ayarlı

Bu araç ne yapar

Aynı sayı birçok tabanda yazılabilir ve programcılar sürekli dördü arasında geçiş yapar: ikilik, çünkü donanımın tuttuğu şey odur; on altılık, çünkü ikiliğin okunabilir bir kısaltmasıdır; onluk, çünkü insanlar öyle düşünür; ve sekizlik, çünkü dosya izinleri ve birkaç eski sistem hâlâ onu kullanır. Buradaki alanlardan herhangi birine bir değer yazın, geri kalanı izlesin; ayrıca 2 ile 36 arasında herhangi bir tabana ayarlayabileceğiniz bir alan daha.

Bunu bir okul hesap makinesinden ayıran şey, genişlik seçici ve bit ızgarasıdır. 8, 16, 32 ya da 64 bit seçin, negatif sayılar bir eksi işareti yerine gerçek makine gösterimlerini alsın ve her bit tıklayabileceğiniz bir şey olsun.

Bir taban gerçekte nedir

Bir taban, tükenip elde götürmeden önce kaç basamağınız olduğudur. Onlukta on vardır, bu yüzden 9'dan sonra 10 gelir. İkilikte iki vardır, bu yüzden 1'den sonra 10 gelir. Her basamağın konumu tabanın bir kuvvetidir ve hepsi bundan ibarettir:

1011           # the number, in base 2
1 x 8 = 8      # bit 3
0 x 4 = 0      # bit 2
1 x 2 = 2      # bit 1
1 x 1 = 1      # bit 0
8+0+2+1 = 11   # the total, in decimal

Ondan büyük tabanlar ondan çok basamak simgesine gerek duyar, bu yüzden harfleri ödünç alırlar: on altılık 0-9 sonra a-f gider, orada a 10'dur ve f 15'tir. Bu, her basamağı ve her harfi kullanan 36 tabanına kadar sürer — düz alfabeyle yazabileceğiniz en büyük taban ve bu aracın orada durmasının nedeni.

Neden on altılık, başka bir şey değil

Hex tek belirli bir nedenle popülerdir: 16, 2'nin 4. kuvvetidir; bu yüzden tam olarak bir hex basamağı tam olarak dört biti kapsar. Bu, hex ile ikilik arasındaki dönüşümü aritmetiksiz bir aramaya dönüştürür — her hex basamağı, çevresindeki basamaklardan bağımsız olarak kendi dört bitine açılır.

d    e    a    d
1101 1110 1010 1101   # each hex digit is its own nibble

Sekizlik, 8, 2'nin 3. kuvveti olduğu için, basamak başına üç bitle aynı şekilde çalışır — Unix izinlerinin sekizlik olmasının nedeni budur: kullanıcı grubu başına üç izin biti tam olarak bir basamağa sığar. Onluğun ikilikle böyle bir ilişkisi yoktur; aralarında dönüştürmenin bir arama yerine gerçek bölme gerektirmesinin nedeni budur.

Buradaki ikilik alanın dörderli, hex alanın ikişerli gruplanmasının nedeni de budur: gruplar, önemli olan sınırlarla hizalanır; böylece bir nibble'ı ya da bir baytı saymadan ekrandan okuyabilirsiniz.

Negatif sayılar ve ikiye tümleyen

Bir negatif sayının tek başına ikilik biçimi yoktur. Bir yazmaçta eksi işareti yoktur — yalnızca bitler — bu yüzden işaretin bitlerin kendisinde kodlanması gerekir ve bu, kaç bit olduğuna karar vermeyi gerektirir. Genişlik seçicinin var olmasının ve onu değiştirdiğinizde yanıtın değişmesinin nedeni budur.

Her modern makinenin kullandığı şema ikiye tümleyendir: bir negatif sayıyı temsil etmek için, pozitif biçimini alın, her biti ters çevirin ve bir ekleyin. Sonuç, en üst bitin «negatif» anlamına gelmesi ve sıradan toplamanın işaretler için hiçbir özel durum olmadan çalışmaya devam etmesidir.

0000 0101   # 5
1111 1010   # every bit inverted
1111 1011   # plus one: -5 as a byte, or fb in hex

Yazmacı genişletin, aynı sayı farklı bir desen alsın: -5, 8 bitte fb, 16 bitte fffb ve 32 bitte fffffffb'dir. Değer değişmedi; onu taşıyan bit sayısı değişti. Bu araçta genişliği değiştirmek tam olarak bunu gösterir.

0xFF neden hem 255 hem −1

ff bitleri işaretli olup olmadıklarını söylemez. 1111 1111 tutan bir bayt, onu yükleyen kod işaretsiz bir tür bildirdiyse 255, işaretli bir tür bildirdiyse −1 olarak okunur. Baytın kendisinde ikisini ayırt eden hiçbir şey yoktur — tür, böyle bir bilgi taşımayan bitler hakkında programın öne sürdüğü bir iddiadır.

Bu, tüm bir gerçek hata ailesinin kaynağıdır: negatif çıkan bir sağlama toplamı, bir dosyadan okunan ve sıfırdan küçük karşılaştırılan bir bayt, işaretliliği uygulamaya bağlı tanımlı olduğu için ARM'de x86'dan farklı davranan bir C char'ı. İşaretli ve işaretsiz okumalar farklı olduğunda, bu araç ikisini de gösterir, çünkü uyumsuzluk genellikle aradığınız şeydir.

Bit ızgarası

Geçerli değerin her biti konum numarasıyla gösterilir ve birine tıklamak onu çevirir. Tabanlar hemen güncellenir; bu, birkaç soruyu elle olduğundan çok daha kolay yanıtlanır kılar:

  • Bu bayrak değerinde hangi bit ayarlı — aralarında tıklayın ve konumları okuyun.
  • 4 ve 7 bitleri için maske ne — o ikisini ayarlayın ve hex'i okuyun.
  • En üst biti ayarlamak işaretli bir değere ne yapar — onu görünür biçimde negatif yapar.
  • Bu değer ikinin kuvveti mi — ikinin kuvvetinin tam olarak bir biti ayarlıdır.

Bit 0, en az anlamlı bittir ve sağda durur; bu evrensel kuraldır ve ızgaranın sağdan sola bir sayfada bile soldan sağa kalmasının nedenidir. Satırlar sekiz bit genişliğindedir; böylece bayt sınırları bir bakışta görünür.

Büyük sayılar tam kalır

JavaScript sayıları double'dır; tam sayıları yalnızca 2^53'e kadar — yaklaşık 9 katrilyon — tam tutar. 64 bitlik bir değer bunu aşabilir ve sıradan sayılar üzerine kurulu bir dönüştürücü onu sessizce yuvarlar, makul görünen ve son basamaklarında yanlış olan bir hex dizesi verir.

Buradaki her şey bunun yerine keyfi kesinlikli tam sayılar kullanır; böylece tam bir 64 bitlik değer tam olarak dönüşür. Keyfi kesinlik genişlik modu daha da ileri gider ve sınırı tümüyle kaldırır — kriptografik değerler ve büyük tanımlayıcılar için yararlıdır — ama unutmayın ki sabit bir genişlik olmadan ikiye tümleyen yoktur; bu yüzden o moddaki bir negatif sayı her tabanda yalnızca bir eksi işareti taşır.

Sıkça sorulan sorular

−5 neden ikilikte −101 yerine fb olarak görünüyor?
Çünkü bir yazmaçta eksi işareti yoktur. Bir genişlik seçildiğinde, negatif sayılar makinenin gerçekte sakladığı şey olan ikiye tümleyende gösterilir: bir bayttaki −5, 1111 1011 ya da fb'dir. İşaretli matematiksel biçimi istiyorsanız, genişliği keyfi kesinliğe geçirin.
0xFF, 255 mi −1 mi?
İkisi de — bitler aynıdır ve yalnızca bildirilen tür karar verir. İşaretli 8 bitlik bir değer ff'yi −1 olarak okur; işaretsiz bir değer onu 255 olarak okur. İki okuma farklı olduğunda, bu araç onları yan yana gösterir.
Neden onluk yerine bu kadar çok on altılık kullanılıyor?
Çünkü bir hex basamağı tam olarak dört bittir; böylece hex ve ikilik aritmetiksiz bir aramayla dönüşür ve basamaklar bayt sınırlarıyla hizalanır. Onluğun ikilikle böyle bir ilişkisi yoktur; bu yüzden onluk bir değer hangi bitlerin ayarlı olduğu hakkında size hiçbir şey söylemez.
Buradaki en yüksek taban nedir ve neden 36?
36, çünkü bu 10 basamak artı 26 harf — düz Latin alfabesinin sunduğu her simge. Daha yükseğe çıkmak, hangi fazladan karakterlerin kullanılacağına dair bir kural gerektirirdi ve üzerinde anlaşılmış tek bir tane yoktur.
İçinde 0x ya da boşluklar olan bir değer yapıştırabilir miyim?
Evet. 0x, 0b ve 0o önekleri eşleşen tabanlarında kabul edilir ve boşluklar ile alt çizgiler yok sayılır; böylece önce temizlemeden doğrudan koddan ya da bir veri sayfasından yapıştırabilirsiniz.
64 bitlik bir değer tam olarak dönüşür mü?
Evet. Tüm aritmetik keyfi kesinlikli tam sayılar kullanır; böylece 2^53'ün ötesindeki — sıradan bir JavaScript sayısının yuvarlamaya başladığı — değerler tam kalır.
Yazdığım herhangi bir şey bir sunucuya gönderiliyor mu?
Hayır. Bu, tarayıcınızda aritmetiktir; hiçbir şey yüklenmez ya da günlüğe yazılmaz ve ağ bağlantısı olmadan çalışır.