AZ Tools

Conversor IEEE 754 (32 e 64 bits)

Converter

Números de ponto flutuante são guardados como um bit de sinal, um expoente enviesado e uma fração (mantissa), e a diferença entre o que você digita e o que é de fato armazenado é a causa de inúmeros bugs de arredondamento. Este conversor mostra a representação IEEE 754 exata de qualquer número decimal em float32 (simples, 1+8+23 bits, viés 127) e float64 (duplo, 1+11+52 bits, viés 1023): a cadeia de bits colorida, a palavra hex, o expoente sem viés e a mantissa, a categoria do valor (normal, subnormal, zero, infinito, NaN) e o valor realmente armazenado após o arredondamento. Também funciona ao contrário — cole uma palavra hex de 8 ou 16 dígitos e obtenha o número decodificado e seu detalhamento completo. Útil para depurar serialização, shaders e código embarcado, buffers de GPU e perguntas do tipo "por que 0.1 + 0.2 != 0.3?". As entradas especiais Infinity, -Infinity e NaN são aceitas. Tudo roda localmente; nada é enviado.

float32 (single)normal
00111101110011001100110011001101
0x3dcccccd
Sinal
0 (+)
Expoente
123 (2^-4)
Mantissa
1.10011001100110011001101
Armazenado
0.10000000149011612

Arredondado — float32 não pode armazenar este valor exatamente.

float64 (double)normal
0011111110111001100110011001100110011001100110011001100110011010
0x3fb999999999999a
Sinal
0 (+)
Expoente
1019 (2^-4)
Mantissa
1.1001100110011001100110011001100110011001100110011010
Armazenado
0.1
sinal expoente fração

float32 = 1 sinal + 8 expoente + 23 fração bits; float64 = 1 + 11 + 52. O viés do expoente é 127 / 1023.

Como usar

  1. Mantenha 'Decimal → bits' e digite um número (ex.: 0.1, -3.14, 1e10, Infinity, NaN) para ver float32 e float64.
  2. Leia a divisão sinal / expoente / mantissa, a palavra hex e o valor armazenado; uma nota avisa quando o float32 teve de arredondar.
  3. Mude para 'Bits → decimal', escolha a precisão e cole uma palavra hex para decodificá-la a um número.

Perguntas frequentes

Por que o valor armazenado difere do que digitei?
A maioria das frações decimais não pode ser representada exatamente em ponto flutuante binário. A ferramenta mostra o valor representável mais próximo — ex.: 0.1 em float32 é na verdade 0.100000001490116119384765625. Uma nota de arredondamento aparece sempre que o valor float32 armazenado difere da sua entrada; float64 armazena o mesmo valor que o JavaScript já usa.
O que significam os bits coloridos?
Vermelho é o bit de sinal (0 positivo, 1 negativo), azul é o expoente (enviesado: subtraia 127 para float32 ou 1023 para float64 para obter a potência de dois) e verde é a fração/mantissa. Para números normais a mantissa é 1.fração; para subnormais é 0.fração com o expoente mínimo.
Como infinito, NaN e zero são mostrados?
Um expoente todo de uns com fração zero é ±infinito; um expoente todo de uns com fração não nula é NaN; expoente e fração todos zeros é ±zero (note o bit de sinal distinto do -0); e um expoente todo zeros com fração não nula é um número subnormal. A categoria é rotulada em cada cartão.
Qual formato hex a decodificação espera?
O hex big-endian dos bits crus: 8 dígitos hex para float32 (ex.: 3f800000 = 1.0) e 16 para float64 (ex.: 3ff0000000000000 = 1.0). Um 0x inicial e espaços são ignorados, e a entrada mais curta é preenchida com zeros à esquerda.

Ferramentas relacionadas