Float’tan Hex Bitlerine Dönüştürücü

Bir sayı girin; IEEE-754 tek ve çift duyarlık hex gösterimini alın.

Nasıl hesaplanır?

Sayı IEEE 754 ikili kayan nokta olarak saklanır ve baytları, en anlamlı bayt başta olmak üzere onaltılık yazılır. Tek duyarlık 32 bittir: 1 işaret + 8 üs + 23 kesir, üs kayıklığı 127. Çift duyarlık 64 bittir: 1 + 11 + 52, kayıklık 1023. Normal bir değer (−1)s × 1,f × 2E−kayıklık eder. Girdi önce çift duyarlıklı olarak okunur, aynı değer tek duyarlık satırı için en yakın 32 bitlik kayan noktaya yuvarlanır; bu yüzden iki satırın hassasiyeti farklı olabilir. 32 bit için fazla büyük değerler sonsuz (0x7F800000) olarak, fazla küçük olanlar sıfır ya da alt-normal olarak görünür. 0,1 gibi ondalık virgül kabul edilir; “1,000” belirsizdir ve sonuç vermez, metin ya da 64 bit aralığını aşan sayılar da vermez.

Örnek hesaplama

−2,5 girelim. İşaret biti 1'dir. 2,5 ikilikte 10,1 olur; bu da 1,01 × 21 demektir. Kesir, baştaki 1'den sonraki bitlerdir: 01 ve ardından sıfırlar. Tek duyarlık: üs 1 + 127 = 128 = 10000000; bitler 1 10000000 0100…0 olur, dörderli gruplanınca 1100 0000 0010 0000 … ve sonuç 0xC0200000 çıkar. Çift duyarlık: üs 1 + 1023 = 1024 = 10000000000; sonuç 0xC004000000000000'dır. İkisi de tamdır, çünkü 2,5 için yalnızca birkaç kesir biti yeterlidir.

Bu örneği dene →

Sık yapılan hatalar

  • 0,1 gibi bir ondalığın tam saklanacağını sanmak. İkilikte kesri hiç bitmez; bu yüzden tek duyarlık 0x3DCCCCCD, çift duyarlık 0x3FB999999999999A verir: son basamak ikisinde de yukarı yuvarlanmıştır.
  • Onaltılık çıktıyı tam sayı gibi okumak. 0x3F800000 kayan nokta olarak 1,0'dır; aynı baytlar tam sayı olsaydı 1065353216 anlamına gelirdi.
  • Bayt sırasını karıştırmak. Araç, insanın okuyacağı big-endian biçimini yazar; aynı değerin little-endian bellek dökümünde baytlar ters sırada görünür.
  • Bin sayısını binlik ayracıyla 1,000 diye yazmak. Virgülden sonra tam üç hane gelirse belirsiz sayılır ve sonuç çıkmaz; 1000 yazın.
  • Negatif sıfırı unutmak. −0'ın işaret biti 1'dir (0x80000000) ve sayı olarak eşit olsalar da 0'dan (0x00000000) farklıdır.

Bu hesaplama hakkında

Bu dönüştürücü, bir sayının ham IEEE 754 ikili gösterimini hem tek duyarlıkta (32-bit: 1 işaret biti, 8 üs biti, 23 mantis biti) hem de çift duyarlıkta (64-bit: 1 işaret biti, 11 üs biti, 52 mantis biti) onaltılık olarak gösterir — neredeyse tüm modern diller ve işlemcilerin kayan noktalı sayıları saklamak için kullandığı format.

Yazılım mühendisleri, serileştirme/geri serileştirme hatalarını ayıklarken, ikili dosya ayrıştırıcıları yazarken veya doğrularken, platformlar arası kayan nokta tutarlılığını kontrol ederken veya basitçe 0,1 gibi bir değerin neden ikili olarak tam gösterilemediğini — finansal ve bilimsel kodda ince yuvarlama hatalarının klasik kaynağı — anlamaya çalışırken bu tür bit düzeyinde bir görünümü kullanır.

Bu faydalı oldu mu?

En fazla 3 tepki seçebilirsiniz.

Yorumlar (1)

  • Editör ekibi

    Onaltılık değer en anlamlı bayt başta olacak biçimde yazılır; bit desenini okuma biçimi budur, oysa küçük sonlu (little-endian) bir makinenin bellek dökümü aynı baytları ters sırada gösterir. 0,1 deneyin: tek duyarlıkta 0x3DCCCCCD, çift duyarlıkta 0x3FB999999999999A verir ve sondaki rakamlar onun tam onda bir değil, yuvarlanmış bir değer olarak saklandığını gösterir. Bir ikili dosyada, bir ağ protokolünde ya da bir sınıf alıştırmasında mı hata ayıklıyorsunuz?

Popüler hesaplayıcılar

Tüm Hesaplayıcılar