Как число хранится в памяти компьютера: калькулятор IEEE 754 и дополнительного кода

Сохранить
Нажмите Ctrl+D для сохранения
Перевод числа в машинный код
Инструмент для получения прямого, обратного и дополнительного кода, а также формата IEEE 754.
Для того, чтобы посмотреть машинное представление введенного значения, нажмите на кнопку ниже:

Как и зачем переводить числа в машинный код?

Представьте, что вы заглянули «под капот» вашего компьютера. Процессор не понимает привычные нам цифры вроде 5, 100 или -42. Вся информация для него — это физические импульсы электричества: есть напряжение (единица) или нет напряжения (ноль). Наш инструмент наглядно показывает, в какую именно цепочку нулей и единиц процессор превращает введенные вами данные.

Зачем нужен дополнительный код?

Если с обычными (положительными) числами всё интуитивно понятно — они просто переводятся в двоичную систему счисления, то с отрицательными числами возникает проблема. Как компьютеру понять, что перед ним число со знаком «минус», если у него нет символа минуса, а есть только 0 и 1?

Для решения этой задачи инженеры придумали дополнительный код (Two's complement). Это изящный математический трюк, который позволяет процессору складывать положительные и отрицательные числа совершенно одинаково, не усложняя внутренние микросхемы.

Процесс получения такого кода состоит из трех шагов:

  • Прямой код: Берем число по модулю (без минуса), переводим в двоичный вид, а самый первый (левый) бит делаем единицей — это сигнал, что число отрицательное.
  • Обратный код: Берем прямой код и меняем в нем все нули на единицы, а единицы на нули. При этом бит знака мы не трогаем.
  • Дополнительный код: К получившемуся обратному коду просто прибавляем единицу. Готово! Именно этот результат и отправляется в оперативную память.

Как хранятся числа с запятой (стандарт IEEE 754)

Если в вашем числе есть дробная часть (например, 3.14), обычный перевод не сработает. Бесконечные дроби нужно как-то уместить в строгие рамки 32 или 64 бит. Для этого весь мир использует единый стандарт IEEE 754.

Алгоритм разбивает ваше число на три отдельных контейнера:

  1. Знак: Всего один бит. Ноль означает плюс, единица — минус.
  2. Порядок (Экспонента): Показывает, на сколько позиций процессору нужно «сдвинуть запятую», чтобы правильно прочитать значение.
  3. Мантисса: Самая длинная часть. В ней хранятся непосредственно сами цифры числа (значащая часть).

Этот калькулятор будет полезен студентам и начинающим программистам на языках C/C++ или Ассемблер. Вы можете использовать его для самопроверки при решении задач по архитектуре ЭВМ и информатике.

В памяти компьютера целые отрицательные числа хранятся в дополнительном коде (инверсия битов + 1). Дробные числа обрабатываются по стандарту IEEE 754: они жестко разделяются на бит знака, экспоненту (порядок смещения запятой) и мантиссу (дробную часть).

Как процессор видит целые отрицательные числа

Компьютер не понимает знак «минус». Для него существует только наличие напряжения в ячейке памяти (1) или его отсутствие (0). Чтобы научить машину работать с отрицательными значениями, инженеры придумали изящный математический трюк — дополнительный код (Two's complement).

Благодаря ему процессору не нужен отдельный блок для вычитания. Операция 10 - 4 внутри процессора выглядит как сложение: 10 + (-4). Чтобы это сработало, число проходит три стадии трансформации.

Пример расчета: прячем число -42 в один байт (8 бит)

Представьте, что вы пишете программу на С++ и создаете переменную int8_t a = -42;. Вот что произойдет внутри процессора:

  1. Прямой код (модуль числа): Переводим число 42 в двоичную систему. Получаем 00101010. Крайний левый ноль означает, что число положительное. Но нам нужен минус, поэтому левый бит меняем на единицу: 10101010.
  2. Обратный код: Берем прямой код и меняем все нули на единицы, а единицы на нули. Знаковый (первый) бит при этом не трогаем! Получаем: 11010101.
  3. Дополнительный код: К полученному возвратному коду прибавляем обычную математическую единицу (1). Итог: 11010110.

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

Дробные числа и стандарт IEEE 754

С целыми числами все решается простой конвертацией. Но как сохранить число Пи (3.14159...), если количество ячеек памяти строго ограничено 32 или 64 битами? Здесь вступает в игру международный стандарт IEEE 754. Он заставляет компьютер хранить числа в формате научной нотации.

Вместо того чтобы запоминать число целиком, память разбивается на три изолированных контейнера:

Блок За что отвечает Суть простыми словами
Знак (1 бит) Плюс (0) или минус (1) Определяет направление на числовой оси.
Экспонента / Порядок (8 или 11 бит) Смещение запятой Показывает процессору, на сколько позиций нужно сдвинуть запятую влево или вправо при восстановлении числа. Хранится со специальным смещением (bias).
Мантисса (23 или 52 бита) Значащие цифры Сама "дробь". Целая часть (всегда равна 1) отбрасывается для экономии места, сохраняется только хвост после запятой.

Главные ошибки студентов на экзаменах

  • Забыть про неявную единицу в мантиссе. При восстановлении числа из формата IEEE 754 к мантиссе всегда нужно прибавлять 1. (единицу с запятой), иначе результат будет искажен.
  • Инвертировать знаковый бит. При поиске обратного кода для целых чисел новички часто инвертируют вообще все биты. Крайний левый бит (знак) всегда должен оставаться нетронутым.
  • Путать разрядность. Число 5 в 8-битной системе выглядит как 00000101, а в 16-битной — как 00000000 00000101. Если вы забудете дописать нули слева, дальнейший расчет дополнительного кода будет неверным.
Максим Алипатов
Максим Алипатов
Разработчик и проектировщик
Сохранить
Нажмите Ctrl+D для сохранения
Архитектор веб-инструментов с многолетним опытом. Проектирую точные интерактивные калькуляторы для платформы calcman.ru. Моя цель — делать сложные вычисления простыми и моментальными: будь то расчеты для строительства и инженерии, бизнес-модели, финансы, IT или повседневные задачи в сфере здоровья и авто. От профи до любителя — точный ответ в один клик.
alipatov.com