Числа, битовые операции и единицы

Конвертер IEEE 754Посмотрите, что хранится в битах

Сравните десятичное число с сохранённым значением или прочитайте полное шестнадцатеричное либо двоичное слово.

Конвертер IEEE 754

Ввод

Данные обрабатываются в этом браузере и не отправляются на сервер.

Десятичный ввод: точка и необязательная экспонента e/E. Hex: 8/16 цифр; двоичный: 32/64 бита. В словах допустимы 0x/0b, пробелы и табуляция.

Результаты

Краткая запись · 9 / 17 значащих цифр

0.100000001

Нормальное

Бит знака · Битов: 1

0

Записанная экспонента · Битов: 8

01111011

Поле дроби · целое без знака · Битов: 23

10011001100110011001101
Точность
32 бита · binary32
Представление ввода
Десятичное число
Шестнадцатеричное слово
0x3DCCCCCD
Двоичное слово
00111101110011001100110011001101
Бит знака
0
Записанная экспонента
123
Эффективная экспонента
-4
Поле дроби · целое без знака
5033165
Неявный старший бит
1
Формула точного значения
13421773 × 2^-27
Итог преобразования
К ближайшему, при равенстве — к чётному
Точное сохранённое число · десятичное
0.100000001490116119384765625
Разность · сохранённое − исходное
0.000000001490116119384765625

Параметры

Прямое округление к выбранной точности: ближайшее, при равенстве — чётное. Смена точности или представления заново толкует текст. До 1024 символов; явная десятичная экспонента −4096…4096.

Разбор завершён.

Конвертер IEEE 754 помогает разобраться, почему короткое число в отладчике не объясняет результат сравнения. Полная десятичная запись показывает сохранённую дробь, а разность с исходным вводом — величину и направление отклонения.

Числа с плавающей точкой можно кодировать из десятичного текста или читать из готового слова. В первом случае возможно округление, во втором важно сохранить исходные биты. Для дампа памяти сначала проверьте разрядность и порядок байтов.

Чем полезен Конвертер IEEE 754

Одна цель на двух числовых сетках

Конвертер IEEE 754 округляет исходную точную дробь отдельно для двух форматов. Для 0.1 в binary32 сохраняется 0.100000001490116119384765625. Binary64 подходит ближе, но тоже не даёт точного совпадения. Знак разности показывает, выше или ниже цели находится сохранённое число.

Одна целевая позиция проецируется на редкую и частую числовые сетки; кольца отмечают ближайшие представимые точки.

Разные NaN остаются разными

Слова 7FC00001 и 7FC00002 — тихие NaN с нагрузкой 1 и 2. Чтение исходных битов сохраняет эту разницу, знак и бит quiet. Это полезно при сравнении регистров: обычная числовая запись показала бы для обоих только NaN и скрыла важные детали.

Два шаблона NaN с разными отметками нагрузки сохраняют собственные отметки в отдельных результатах.

Сначала определите смысл ввода

01

Выберите число или готовое слово

Начальное значение — десятичное 0.1, формат binary32. Переход к hex меняет толкование текста, а не преобразует сам текст. Вставьте полное слово, расположив старший бит слева и согласовав длину с точностью.

02

Откройте полную десятичную запись

Краткий вид использует 9 значащих цифр для binary32 и 17 для binary64. Точная запись сохраняет все цифры. Разность равна сохранённому значению минус ввод; отрицательный знак означает меньшее число, а не сбой анализа.

03

Проверьте замену в предпросмотре

Пример открывает пять вариантов, включая отрицательный ноль и NaN с нагрузкой. Применение заменяет ввод, отмена возвращает его и результат. Автоматика ждёт 350 мс; без неё доступны кнопка разбора и Ctrl/Cmd + Enter.

От полей к сохранённому числу

Знак, экспонента и дробная часть

Одинарная и двойная точность используют группы 1/8/23 и 1/11/52 бит. Записанная и эффективная экспоненты показаны отдельно, как и неявный старший бит. Для нормальных чисел он равен 1, для субнормальных — 0, поэтому нулевая экспонента требует иной формулы.

Прямое округление без промежуточного double

Десятичный текст разбирается как точная рациональная дробь и сразу округляется до целевого формата. Значение чуть выше середины 1.000000059604644775390625 правильно выбирает следующий float32. Предварительное преобразование в double могло бы стереть эту малую разницу.

Полные слова для воспроизводимых проверок

Шестнадцатеричное представление и двоичная запись сохраняют все биты, в том числе сигнальные NaN. В отчёт входят исходный ввод, точность, поля, точное число и ошибка округления. Можно скопировать слово отдельно или сохранить полный текст для сравнения реализаций.

Границы форматов и округления

Два формата и одно правило
Поддерживаются только binary32 и binary64. Выбирается ближайшее число, а при равном расстоянии — значащая часть с чётным младшим битом. Половинная точность, bfloat16, расширенные форматы, другие режимы округления и аппаратные флаги исключений не реализованы.
Длина слова строго задана
Hex требует 8 или 16 цифр, двоичный ввод — 32 или 64 бита. Допустимы соответствующий префикс, пробелы ASCII и табуляция. Другие разделители, недостающие и лишние цифры отклоняются. Нули не дописываются, биты не отрезаются, байты не переставляются.
Крайние значения видны явно
Слишком большое конечное число может стать бесконечностью со знаком, слишком малое — субнормальным или нулём со знаком. Это результат преобразования, не ошибка синтаксиса. Разность вычисляется лишь для конечного десятичного ввода и конечного результата; у сырого слова нет отдельной десятичной цели.
Нагрузка не включает quiet
Старший бит дробной части читается по обычному соглашению: 1 означает тихий NaN. Он не входит в нагрузку. Текст NaN создаёт канонический тихий NaN с нулевой нагрузкой. Для другого шаблона нужен hex или двоичный ввод; соглашения старых архитектур и их исключения не эмулируются.
Один ограниченный ввод
Не более 1024 символов; явная десятичная экспонента — от −4096 до 4096. Разделитель дробной части — точка даже на русской странице. Выражения, переносы, файлы, URL и пакетная обработка не поддерживаются. Нет смены порядка байтов, кнопок битов, соседних значений, расстояния ULP и относительной ошибки.

Конвертер IEEE 754: частые вопросы

Почему десятичная дробь 0,1 округляется?

У одной десятой в знаменателе есть множитель пять, а конечная двоичная дробь имеет знаменатель в виде степени двойки. Поэтому двоичная запись 0.1 повторяется бесконечно и должна округляться. Вводите число с точкой и смотрите полную десятичную запись, чтобы увидеть действительное значение.

Что меняется при переходе с 32 на 64 бита?

В binary32 хранятся 23 бита дроби плюс неявный бит нормальных чисел: всего 24 бита точности. В binary64 — 52 плюс один. Поле экспоненты расширяется с 8 до 11 бит. Диапазон становится шире, а промежутки между числами меньше, но 0.1 всё равно не представляется точно.

Как расшифровать знак, экспоненту и мантиссу?

Для нормального числа знак определяет положительное или отрицательное значение, из записанной экспоненты вычитается 127 либо 1023, а перед дробью добавляется неявная 1. Нулевая экспонента использует субнормальную трактовку; все единицы означают бесконечность или NaN.

Чем отличаются NaN, бесконечность и ноль со знаком?

Все единицы в экспоненте и нулевая дробь дают бесконечность; ненулевая дробь даёт NaN. Ноль со знаком имеет нулевые экспоненту и дробь, но сохраняет бит знака. Поля quiet и нагрузки позволяют различать несколько битовых шаблонов внутри класса NaN.

Как получить десятичное число из hex-представления?

Выберите hex и подходящую точность, затем вставьте полное слово. Например, 3F800000 в binary32 даёт ровно 1. Это интерпретация тех же битов как числа с плавающей точкой, а не преобразование шестнадцатеричного целого 1065353216 в float.

Результат вызывает вопросы?

Проверьте другое граничное значение

Конвертер IEEE 754 позволяет проверить слово из дампа или дробь возле границы округления. Меняйте одно условие за раз и сохраняйте отчёт после обновления результата.